Test 방법으로는 노트북과 안드로이드 단말에 Nmap 을 설치하여 일반 AP(iptme 등) 와 Mobile AP(안드로이드 테더링) 에 port scanning 을 하였습니다.
그 결과 일반 AP는 많은 port 가 탐지 된 반면에 Mobile AP (안드로이드 단말로 생성한 테더링 AP) 는 53번 port 만이 open 되어 있었습니다.
아래 그림은 그 결과 입니다.
말씀드린대로 Nmap으로 port 스캐닝을 하였으며 모바일 AP는 3대의 SK, KT 통신사 제품을 사용하였습니다. 53번 port 만 열려있는 경우도 있고 다른 1개의 port가 추가적으로 열려있는 경우도 있었습니다만..
항상 53번 port는 열려있었습니다. 일반AP들은 위와 같은 화면같이 수많은 port 들이 open 되어 있었구요..
그런데 저는 좀 의구심이 드는 것이 왜 테더링한 모바일AP는 53번만 open되어 있다고 탐지되는 것인지....잘 모르겠습니다.. (탐지의 오류일런지...아니면 정말 53번만 open 되어 있는지...80으로 통신해도 잘 되는데......어찌하여...저런 결과가...)
하지만 만약 저 결과가 정확한 것이라면 NAT Port Preservation 결과와 port 스캐닝 결과를 합치면 좀 확실한 높은 확률로 테더링 한 AP 를 탐지할 수 있지 않을 까....하는 생각이 문득 들었습니다.
질문 드립니다.
1. nmap 으로 port 스캐닝한 저 정보가 정확한 것일까요? (53번만 열려있다는 결과를 믿어도 될런지...)
2. 만약 믿을 수 있는 정보라면 어찌하여 53번만 open 되어 있는 것일까요..
따로 구글링이나 안드로이드 코드를 봐도 저 부분을 명확히 찾기가 어렵습니다..
도움 부탁드리겠습니다.
감사합니다.
- 67/udp (for DHCP)
- 53/udp & 53/tcp (for DNS)
iPhone 계열은 어떤지 모르겠네요. 그리고 위 구성도 default 설정일 뿐 APP 설치에 따라 추가적으로 Port가 열릴 수 있습니다. (예를 들어, 안드로이드 단말에 Kies Air 설치/수행 시 HTTP를 위해 80/tcp가 열림)
또한 누군가가 의도적으로 일반 와이파이 AP인 것처럼 속이려 한다면, 테더링 AP(안드로이드 단말)를 루팅해서 일단 AP와 똑같이 Port를 열게 할 수 있으니 nmap 정보만으로 판단하기는 정확도가 떨어집니다.
말씀하신 것 처럼 Nmap, Port Preservation, NAT Type등을 모두 종합하여 판단하는게 좋을 듯 하네요.
안타깝지만 안드로이드는 OS가 리눅스라 OS fingerfrint 결과는 명확하지 않았습니다.
저도 망구성도를 보며 단순히 부장님말씀대로 가정을 세우긴 했으나 명확하지 않았는데 부장님 말씀을 듣고 나니 확신이 생겨 기분이 좋습니다.
저 실례가 되지 않는다면 저 디폴트로 설정된 port 부분이 어느부근에 코드로 이루어져 있는지 힌트라도 제가 여쭐수 있을까요?
4일동안 안드로이드 코드를 하나하나 뒤지고 있는데,, 제가 코딩에 그리 익숙치 않아서 아직까지 못찾았습니다;
https://android.googlesource.com/platform/frameworks/base/+/095c58b73ac112cc7e00771430765434893d8bc5/wifi/java/android/net/wifi/p2p/WifiP2pService.java#
https://android.googlesource.com/platform/system/netd/+/android-4.1.1_r1/TetherController.cpp
이 컨트롤러입니다. system daemon에서 이 처리를 전부하게 됩니다. 여기 보면 dhcpd, dnsmasq를 실행하게 됩니다.
여기 보면 dhcpd의 option을 설정하게 되는데, dhcp 응답 메시지(dhcp offer/dhcp ack)의 dhcp option 특징을 파악해서 tethering 한건지 판단할 수도 있지 않을까 합니다.
다음 링크 참조하세요.
https://www.netmanias.com/bbs/view.php?id=qna&no=5198