스캔이란?

  • 서비스를 제공하는 서버의 작동 여부와, 그 서버가 제공하고 있는 서비스를 확인하기 위한 것

  • TCP 기반의 프로토콜은 기본적으로 질의(request)를 보내면 응답(response)을 하기 때문에, 이것을 이용하여 확인하는 것


ICMP(Internet control Messaging Protocol) 스캔

방법 1. ping을 사용한 Echo Request(Type 8), Echo Reply(Type 0)을 이용하는 방법
  • ping은 ICMP 프로토콜을 사용하여, 네트워크와 시스템이 정상적으로 작동하는지 확인하기 위한 간단한 유틸리티
$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.028 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.028 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.027 ms
  • PING localhost (127.0.0.1) 56(84) bytes of data.

    • 보내는 ICMP Echo Request 패킷의 크기

    • 운영체제마다 보내는 바이트 길이가 다름(윈도우 32byte, 리눅스/유닉스 : 56byte)

  • 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms

    • 공격 대상에서 보내온 ICMP Echo Reply 패킷의 크기

    • 공격자가 보낸 패킷과 같은 크기의 패킷

  • 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms

    • Echo Request 패킷이 보내진 뒤 Replay 패킷을 받기까지의 시간
  • 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms

    • TTL(Time To Live) 값으로 운영체제에 따라 Default TTL 값이 다름

    • TTL : 라우터 하나를 지날 때 마다 1씩 줄어들며, 0이 되면 패킷을 폐지

    • 줄어든 TTL 값으로 원격지의 시스템이 몇 개의 라우터를 거쳐서 도달할 수 있는지 알 수 있고 어떤 운영체제인지 어느 정도 판별 가능

image

  • 윈도우는 ping을 보내면 기본적으로 4개의 ICMP 패킷을 보내지만, 리눅스는 중지 명령을 내리기 전까지 Request 패킷을 계속 보냄

  • 리눅스 ping의 패킷은 구성은 조금 다르나, 기본은 윈도우와 같음


방법 2. Timestamp Request(Type 13), Timestamp Reply(Type 14)를 이용한 방법
  • Timestamp request는 원격지 시스템의 현재 시간을 알아보기 위한 패킷

  • 하지만 Timestamp request 패킷에 Reply 패킷을 돌려보내는 시스템이 시간만을 알려준다고 생각할 수는 없음
    (상대 시스템의 Reply 패킷이 돌아온다는 것은 상대 시스템이 활성화 되어 있다는 뜻)


방법 3. Information Request(Type 15), Information Reply(Type 16)을 이용한 방법
  • 이 패킷은 메인 프레임의 터미널과 같이 부팅할 때 자신의 디스크가 없는 시스템에 스스로 자신의 IP를 설정할 수 있도록 하는 패킷

  • 이 방법 역시 Timestamp 패킷과 마찬가지로 죽어있는 시스템은 Reply 패킷을 보내오지 않을 것


방법 4. ICMP Address Mask Request(Type 17), ICMP Address Mask Reply(Type 0)를 이용한 방법
  • 이 패킷은 Information Request패킷과 같이 터미널이 부팅될 때 자신이 속해있는 네트워크의 서브넷마스크를 알기 위해서 보내는 패킷

  • 앞의 두 가지 방법과 마찬가지로 Reply 패킷을 돌려보내는지 확인함으로써 상대 시스템의 활성화 여부를 확인


방법 2, 3, 4는 모든 운영체제에서 작동하지 않음
  • 운영체제에 따라서 세가지 중 일부만 지원하며, 지원 여부에 따라 운영체제를 짐작할 수 있다

image

  • sing 툴을 사용하면 2, 3, 4번 스캔을 할 수 있다.
EXAM>
Timestamp 패킷
./sing –c 1 –tstamp 172.16.0.2
Information 패킷
./sing –info 172.16.0.2
Address Mask 패킷
./sing –mask 172.16.0.2



스위핑(sweeping)

  • ICMP를 이용한 여러 가지 ping은 하나의 시스템을 조사하기에는 적절하나 큰 네트워크에서 활성화 시스템을 찾는 데는 그다지 효과적이지 않음

  • 스위핑은 네트워크 전체에서 활성화 시스템을 찾는 것

  • 스위핑은 검색하고자 하는 네트워크에 브로드캐스트 ping을 보내거나 자동화 도구를 이용해 특정 범위의 네트워크에 ping을 보냄

fping을 이용한 스위핑 (sweeping) 예

image



TCP 헤더의 플래그 비트

  • TCP 헤더에는 플래그 비트가 6개 정의되어 있음

  • 필드 값이 1이면 각 플래그에 해당하는 의미를 가짐


  • URG

    • Urgent Pointer 필드가 유효한지를 나타냄

    • 긴급 데이터를 전송하기 위해 사용

  • ACK

    • Acknowledgment Number 필드가 유효한지를 나타냄

    • 정상적인 피기배킹 방식의 양방향 통신 환경에서, 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트가 1로 지정된다고 생각할 수 있음

  • PSH

    • 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달하도록 지시할 때 사용

    • 수신자에게서 PSH 세그먼트에 대한 응답 프레임이 도착하면, 프레임의 Acknowledgement Number 필드에 표시한 숫자까지의 모든 데이터가 상대 프로세스의 상위 계층에 전달되었음을 의미

  • RST

    • 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용

    • 송신자가 전송을 마쳤으나 수신자에게 아직 도착하지 못한 세그먼트, 혹은 수신자가 아직 긍정 응답하지 않은 세그먼트는 연결이 재설정되었을 때 반드시 재전송되어야 함

  • SYN

    • 연결 설정 요구를 의미하는 플래그 비트므로 가상 회선 연결을 설정하는 과정에서 사용
  • FIN

    • 한쪽 프로세서에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시를 상대방에게 알리는 데 사용

    • 현재 전송 과정에 있는 데이터는 계속 처리할 수 있으며, 상대편 프로세스의 데이터 전송에 장애가 발생하지 않음

    • 연결 해제는 양쪽 프로세스 모두가 FIN 플래그를 전송해야 완료