2011년 1월 23일 일요일

Payload 에서 내가 원하는 문자열을 찾기 위한 캡쳐필터를 자동생성 사용해 보자!

와이어샤크에서 사용가능한 필터는 유용하게 사용되지만, 필터의 문법을 모르면
말짱 꽝이다. 하지만, 와이어샤크 홈페이지에 캡쳐 필터를 자동으로 만들어주는 온라인 도구가 있다. 모든 문법을 만들어 주는 것은 아니고, 문자열을 매칭해 주는 필터를 만들어주는 것이다.

제공하는 필터는 패킷캡쳐를 할때 Payload 에서 사용자가 지정한 문자열을 발견할 시
와이어샤크에서 보여주게 되는 것이다. 단순히 IP 주소나, 포트등은 필터 문법을 어렵지 않게 사용할 수 있지만, Payload 영역은 조금 복잡하다. 일단 다음의 주소로 방문해 보자!

http://www.wireshark.org/tools/string-cf.html

일단 접속해 보면 아래와 같은 화면을 볼 수 있는데, 1) 에 찾고자 하는 문자열을 입력하고
2) 에는 Payload 에서 찾을 위치 offset 시작 주소를 넣는다. 그러면 3) 에 필터가 만들어진다.


이렇게 만들어진 필터를 와이어샤크에서 시작할때 Capture Filter 에 넣어주면 해당 문자열을 탐지하였을때 정보가 나타나게 된다. 주의할 점은 이 필터는 출력필터가 아니라 캡쳐를 시작할 시에 넣어주는 캡쳐필터라는 점을 잊지말자!

만들어진 캡쳐필터로 한번 테스트를 해보자. attack 이라는 문자열을 입력하였는데, 브라우저에서 packetinside.com/attack 으로 시도를 해 보면 탐지가 될것인가 ? 안될것인가 ?  
정답은 탐지가 안된다. attack  이라는 문자열을 포함하고 있지만 말이다. 이것은 위에서 필터를 만들때 offset 을 0 부터 했기 때문이다. packetinside.com/attack 으로 접속하면서 패킷 덤프를 해보면 아래와 같다.


위 정보를 보면 무엇이 잘못되었는지 파악이 될 것이다. 즉, Payload 에 들어가는 내용은 GET /attack 으로 offset 0 에는 G 부터 시작하기 때문이다.  와이어샤크의 출력필터중 contains 같은 것은 attack 이 포함된 것을 매칭할때 유용하지만 여기서 만든 필터는 Payload 의 위치를 지정해서 각 HEX 값을 지정한 것이므로 단순한 매칭으로 보면 안된다. 지정한 Offset 주소부터의 문자열 매칭이 된다는 것을 잊지말자!

자 그럼, 다시 제대로 만들기 위해서는 Offset 을 5 로 지정하면 된다. Offset 에 5를 입력하고 만들어지는 패턴을 보면 아래와 같다 : 

tcp[((tcp[12:1] & 0xf0) >> 2) + 5:4] = 0x61747461 && tcp[((tcp[12:1] & 0xf0) >> 2) + 9:2] = 0x636b
이제 이 패턴을 캡쳐필터로 사용하면 탐지가 되는 것을 확인할 수 있을 것이다.

[참고]
위에서 만들어진 필터를 보면 복잡해 보인다. tcp[12:1] 과 같이 말이다. 이에 대한 의미는 다음 포스팅 글을 참고하기 바란다.

TCP/IP 헤더 내 맘대로...tcp[13] == 2 의 의미는 무엇일까?

댓글 없음:

댓글 쓰기