
빠르게 설계된 IPv6 포트 스캐너로, 인터넷 스캐닝 및 탐색을 목표로 합니다.
fi6s는 속도를 목표로 한 IPv6 포트 스캐너로, 인터넷 스캐닝 및 검색을 위해 설계되었습니다. 이는 비동기적으로 원시 패킷을 전송하고 처리함으로써 달성됩니다.
설계와 목표는 Masscan과 매우 유사하지만, 기능이 완전히 동일하지는 않습니다.
라이선스를 확인해 주세요.
마지막으로: 이는 보안 연구 도구이며, 사용 시 현지 규정을 준수하고 필요한 권한을 획득하는 것은 전적으로 귀하(사용자)의 책임입니다.
fi6s는 최신 Linux 시스템, 예를 들어 Ubuntu에서 상당히 쉽게 빌드할 수 있습니다:
# apt install gcc make git libpcap-dev
$ git clone https://github.com/sfan5/fi6s.git
$ cd fi6s
$ make BUILD_TYPE=release
실행 파일은 ./fi6s에 준비됩니다.
fi6s는 오직 Linux에서만 개발 및 테스트되었습니다. 다른 UNIX 계열 플랫폼에서도 동작해야 하지만, Windows에서는 동작하지 않습니다.
fi6s는 네트워크 세부 정보(소스, 라우터 MAC 및 IP)를 자동으로 감지하므로 바로 스캔을 시작할 수 있습니다:
# ./fi6s -p 80,8000-8100 --max-rate 170 2001:db8::/120
이 예제는 다음을 수행합니다:
2001:db8::/120 서브넷을 스캔하여 총 256개의 IPlist" 형식(암시적 기본값)으로 표준 출력에 스캔 결과 출력스캔할 주소 범위를 지정하는 더 다양한 방법이 있습니다.
무슨 일이 일어날지 확실하지 않은 경우 --print-summary를 사용하여 스캔에 대한 빠른 개요를 확인하거나 --print-hosts를 사용하여 모든 잠재적 대상 IP를 출력할 수 있습니다.
고급 기능 및 추가 설명은 fi6s --help의 출력을 참조하십시오.
원격 호스트가 새 연결 또는 프로브 요청에 응답하여 보내는 데이터를 "배너"라고 합니다. fi6s는 배너 수집을 쉽게 해줍니다.
--banners 옵션만 전달하면 됩니다:
# ./fi6s -p 22 --banners 2001:db8::xx
명령줄에 --udp 플래그를 추가하십시오:
# ./fi6s -p 53 --banners --udp 2001:db8:xx::1
TCP와 달리, fi6s가 프로빙을 지원하는 프로토콜의 포트를 스캔하는 경우에만 유용한(또는 어떤) 결과를 얻을 수 있습니다.
지원되는 프로토콜 목록을 보려면 fi6s --list-protocols를 사용하십시오.
fi6s는 자체 최소 TCP/IP 스택을 제공하기 때문에, 운영 체제가 fi6s가 사용하는 동일한 포트에서 TCP 통신을 시도하지 못하도록 막아야 합니다. 그렇지 않으면 스캔 프로세스가 중단됩니다.
기본적으로 fi6s는 OS에 임시 포트를 예약하도록 요청하고 스캔 기간 동안 해당 포트를 사용합니다. 이는 Linux에서만 작동합니다.
이 작업이 실패하거나 다른 플랫폼을 사용하는 경우(fi6s가 알려줍니다!) 소스 포트를 직접 결정하고 방화벽을 구성하여 이 포트의 모든 트래픽을 차단해야 합니다. 예를 들어:
# ipfw add 1000 deny tcp from any to any 12345 in ip6
또는:
# ip6tables -A INPUT -p tcp -m tcp --dport 12345 -j DROP
그런 다음:
# ./fi6s -p 22 --banners --source-port 12345 2001:db8::xx
UDP는 비연결 지향이므로 이렇게 할 필요는 없지만, 불필요한 ICMPv6 응답이 전송되는 것을 방지하는 것이 좋습니다. fi6s도 기본적으로 이 작업을 수행합니다.
IPv6의 큰 장점은 넓은 주소 공간이며, 위에서 설명한 문제를 피하는 또 다른 방법은 다른 소스 IP를 사용하는 것입니다.
이 IP는 로컬 머신에 할당되어서는 안 되지만, 머신에 반드시 정적 라우팅되어야 합니다. fi6s는 NDP 쿼리에 응답하지 않기 때문입니다.
설정이 올바르게 작동하는지 확인하려면 알려진 공용 IP에 ping을 보내면 됩니다. 예를 들어:
# ./fi6s --icmp --source-ip ${선택한_소스_ip} 2001:4860:4860::8888
--icmp를 사용하여 ICMPv6 Ping 스캔을 수행하십시오:
# ./fi6s --icmp 2001:xxx0::1
왕복 시간은 측정되지 않습니다.
fi6s의 설계를 허용하기 위해 네트워크 환경에 대해 몇 가지 가정이 필요했습니다. 이는 일반적인 사용에 전혀 영향을 미치지 않지만 완전성을 위해 여기에 나열합니다.
즉, 다음과 같은 경우 fi6s가 예상대로 작동하지 않거나 전혀 작동하지 않을 수 있습니다:
배너 수집의 경우, fi6s는 실제 TCP 스택과 유사한 기능을 제공하지 않습니다. 단지 하나의 쿼리를 보내고 그에 따른 응답 데이터를 읽는 것만 지원합니다. 재전송 또는 윈도우 로직은 구현되지 않았습니다.
fi6s는 포트와 시퀀스 번호를 사용하여 얻은 결과가 특정 실행 중인 스캔과 관련되도록 보장하지만, 프로브가 전송된 IP와 실제로 응답하는 IP를 비교하는 검사는 하지 않습니다.
즉, 스캔 중에 traceroute와 같은 작업을 실행해도 스캔 결과에 영향을 미치지 않습니다.
그러나 스캔한 대상이 다른 IP로 응답하는 경우, 입력 목록에 없던 IP가 스캔 결과에 나타나는 것이 가능합니다. 이 특성은 실제로 유용할 수 있습니다. 일부 라우터는 제로 네트워크 주소에서 SNMP 또는 DNS 쿼리를 수락하지만, 기본 IPv6로 응답하기 때문입니다.
예: 3fff:1234:1234:44xx:: 스캔 -> 3fff:1234:1234:44a3:e2a:86ff:fe12:3456에서 응답
fi6s가 스캔된 IP를 무작위화하는 방식(--randomize-hosts 1, 기본값)은 완벽하지 않습니다.
다음과 같이 동작합니다:
예를 들어 3fff::/108을 스캔하면 3fff::1, 3fff::20, 3fff::300의 순서는 무작위입니다.
하지만 3fff::0:*의 모든 주소가 3fff::1:*보다 먼저 스캔되고, 그 다음 3fff::2:*가 스캔되는 식입니다.