티스토리 뷰

ICMP 패킷을 이용하는 ping 유틸리티를 들여다보면, 재밌는 부분이 있다. 기본적으로 ping은 다음과 같은 방식으로 동작한다.


  1. ICMP 요구 패킷을 전송한 다음, 원격지로부터 ICMP 응답 패킷을 받는다.
  2. ICMP 도 IP 패킷에 실려 전송되는 하위 프로토콜의 한 종류이다. 마치 TCP, UDP가 그러한 것 처럼.
  3. ping 에 적절한 인자를 주면, 요구 패킷의 길이를 지정할 수 있다.
    즉, ICMP 의 요구/응답 패킷에 아무 의미 없는 값을 채워 전송할 수 있는 공간이 마련되어 있다.
  4. 원격지 호스트가 브로드 캐스트 혹은 멀티 캐스트 일 경우 응답을 중복 수신하여 받을 수 있다.
  5. 대개 파이어월 안에서 밖으로 ping 에 대한 요구/응답이 쌍을 이룰 경우 통과하게 된다.
  6. 파이어월 밖에서 안으로의 ping 요구 패킷은 필터링 되어 전송되지 않는다.
  7. ping 요구 패킷과 응답 패킷의 의미 없는 값은 서로 같지 않아도 된다.
  8. ping 요청은 어플리케이션이 하는 것이지만, 응답은 커널에서 이루어진다.
  9. ICMP 패킷안에는 요청/요구 쌍에 대한 식별자와 순서를 포함하고 있다.

잘 묵상(!)해보면, 일종의 터널, 즉 ssh의 터널같은 것을 만들 수 가 있게 된다. 시나리오는 다음과 같다.


  1. 파이어월 안에있는 호스트 A, 파이어월 밖에 있는 호스트 B
  2. ping 요구 (A --> B) 를 주기적으로 한다. 그러면 ping 응답 (B-->A)이 계속 올 수 있다.
  3. ping 요구/요청시 위 3 번의 공간에 적절한 컨트롤 명령과 데이터를 넣을 수 있는 패킷을 정의한다.
  4. A 혹은 B는 상대에게 임의의 호스트:포트 C에 접속하도록 명령을 줄 수 있다.
  5. 자신은 특정 포트를 열어 놓고 어떤 클라이언트가 접속해 오면, 4번 기능을 이용하여 원격지에 접속하고 클라이언트의 모든 데이터를 그 세션에 전달한다.
  6. 5 번을 구현하기 위해 3번의 패킷 정의를 적절히 수행하면 된다.

TCP 혹은 모든 IP 패킷을 직접 하려면, 가상의 디바이스를 만들어서 수행하면 될 것이다.

이런 생각들을 머리속으로만 하고 있었는데, 이런 프로젝트가 실제 있더라고.....

ptunnel: http://www.cs.uit.no/~daniels/PingTunnel/
icmptx: http://thomer.com/icmptx/

심지어 ICMP대신 DNS 포트를 이용하는 것도 있다.

http://thomer.com/howtos/nstx.html

장난의 끝은 어디란 말인가.

반응형
댓글
  • 프로필사진 june8th 음.. 이게 정말 잘 돌아간다면.. 으흐흐.. 2006.11.03 00:31
  • 프로필사진 tolkien S사 같은 곳에서 일할때는 ssh도 안되던데, ICMP packet은 아직 막지 않았겠죠? 그렇다면 쓸만할텐데... 2006.11.03 09:54
  • 프로필사진 최호진 ptunnel은 테스트 해보니 잘 동작합니다. ;)

    언제 시간나면 양방향이 되도록 개선해보는 것도 좋을 것 같습니다.
    2006.11.03 17:58
  • 프로필사진 미친감자 궁금한게 있는데.
    방화벽이란 친구가 하는것중에
    내부에서 외부로 요구와 응답에 대한 테이블이 관리되고 있는것 같은데
    이테이블을 full 나가 해서( switch 허브의 mac - port 테이블을 full내는 공격이 있듯이) 방화벽에 대한 공격할 수 있지 않을까?
    음. 생각을 더 깊게 해보면..

    방화벽쪽으로 sip sport -> 열려 있는 dip 열려 있는 dport로
    열려 있는 dip와 sip sport를 계속하여 조합을 만들어 방화벽으로
    전송한다.
    그러면 방화벽은 요구테이블에 계속 필드를 추가하게 되고 max에 가득차면
    max를 넣은 요구에 대해서는 그냥 통과를 할까? 아니면 통과시키지 않을까?
    2006.11.06 13:18
  • 프로필사진 최호진 뭐...방화벽 구현에 따라 달라지겠지.
    공격법이란, 일반적으로 생각할 수 있는 것을 특정 제품이 어떻게 구현했는지 확인해보는 수밖에 없으니까.
    2006.11.07 02:30
댓글쓰기 폼