안녕하세요
저번 플젝 Tor oninon clawer 개발하다가 Tor 사용법에 익숙해져서 이번 개발에도 사용하게 됐습니다.
예전 부터 궁금했던 포트스캐너 공부도 할겸 Tor 프록시를 타는 port scanner 를 만들기로 했습니다.
NMAP 같은 좋은 툴이 있는데 Port Scanner를 개발하는 이유는 좀 더 개인이 편하게 사용할려고 입니다.
(+ 공부도 할겸)
포트스캐너에도 여러가지 방법이 있다고 합니다. 포트 스캐너는 워낙 유명하다 설명은 생략하겠습니다.
제가 만든 Port Scanner 는 Open (Connect) Tcp Port scanner 입니다.
아 참고로 Port scanner를 처음부터 개발하는 건 아니고 잘 만들어져 있는 Port scanner 를 사용했습니다.
Origin Source Code & developer:
https://github.com/se55i0n/PortScanner
여기서 기능 추가 및 약간의? 코드 수정만 했습니다.
추가한 기능
1) Tor proxy 연결
2) ip info 추가 (ksia & gelocation)
3) virustotal api 추가
2)과 3)은 API 키가 필요합니다. email 인증만 있으면 부여해주기 때문에 쉽게 구할 수 있습니다.
api 를 이용하여 파씽하는 요청도 Proxy를 연결하여 가져옵니다.
수정한 기능
1) python2 -> python3
2) 사용자 input으로 port range정의 -> port static 정의
3) 'UserAgent' -> 'User-Agent' : 오타인지는 모르겠으나 http user agent 값이 이상했습니다.
4) 연결된 소켓에게 보내는 data (static 'HELLO\r\n')를 랜덤 string 으로 변경 (데이터 및 길이)
글에 두서가 하나도 없네...
기존 코드가 너무 좋아서 제가 필요로하는 부분만 추가 및 수정 작업을 했습니다.
기존 코드에서 유독 좋았던 것
1. fake_useragent 사용
2. 쓰레드 사용
3. 전체
국내에서 PortScan이 불법이라는 이야기를 들었지만 정확히는 잘 모르겠습니다.
테스트는 개인 서버에서 하는걸로 ... 혹은 malware URl or C&C 등? 이것도 잘 모르겠습니다.
글 제목이 Tor 프록시 와 함께하는 scanner, 그러므로 Tor 프록시연결에 중점을 두었고,
http 프로토콜 일 때에도 Tor 프록시를 타고 수행했습니다. User-Agent 도 random User-agent 이며,
connect 성공 후 보내는 데이터도 random string 으로 작성했습니다.
이렇게 하면 IPS 나 IDS에 좀 더 탐지가 안되지 않을까라는 개인적인 생각을 했습니다.
또한 Open (connect) TCP scanner 이기 때문에 탐지 와 동시에 로그가 남는데, 이를 분석할 때에도
어렵게 하고싶었습니다.
IPS/ IDS를 사용해본 적이 없어서 어떠한 방식으로 Port Scan을 탐지하는지 공부하면, 더 잘 만들 수 있지 않을까 생각합니다.
(어느 글에서 본 것인데 Tcp connect scanner 외의 다른 방법들은 탐지 및 차단하는 룰이 많이 있다고 들었습니다.)
(확실하지 않은 정보이지만 혹시 정확히 하시는 분이 있으면 알려주시면 감사하겠습니다. :) )
개발에 대해서 이야기를 하면
tor 서비스가 구동되어 있어야합니다.
#apt-get update
#apt-get install tor
#service tor start
#ps -ef | grep tor
간단하게 Tor 설치 및 구동 & 확인을 해주면 될 것 같습니다.
linux 에서 기본적으로 Tor Port 는 9050을 사용하기 때문에 Proxy도 9050으로 연결해 주면 됩니다.
server 자체 Proxy 연결은 아니고 프로그램 내에서만 Proxy와 연결합니다.
또 중요한 것이 있는데 TCP Socket의 고갈 문제입니다. (Time_wait)
A 클라이언트가 B 서버에 대해서 동시에 많은 socket을 연결한다고 가정했을 때
A 클라이언트는 socket을 연결하고 사용 후에 close()를 합니다.
이 때 정상적으로 close()가 되면 socket 연결에 사용되었던 port(A 꺼)는 Time_wait 상태로 대기 하게 됩니다.
이 때문에 Port scan을 할 때 많은 양의 Socket을 연결하다 보면, time_wait상태로 된 Port를 사용할 수 없어
socket 연결을 못하는 문제가 발생합니다.
자세한 설명은 갓카오(kakao) 기술 블로그 참고하면 될 것 같습니다.
해결 방안으로는 포트의 재활용이 있습니다. TCP_reuse 라는 설정을 하면 되는데,
간혹 임대 서버에서 따로 설정을 못하는 것으로 알고있습니다. (*확실 하지 않음)
찾아보면 script 형식으로 방법이 있는 것 같은데 안해봐서 잘 모르겠습니다.
뒤 늦게 알게 된 사실이지만 local port 범위 확장 방법도 있습니다.
(저번 플젝에서 bunseokbot bot 형이 알려주신게 이건거 같은데.. 그 떄는 무슨 말인지 이해를 못했었다고함.. 내가.. )
추가하고 싶은 것
OS Fingerprint
'개발' 카테고리의 다른 글
SNS 검색 플젝(Sherlock)을 분석&개발해보자 [0] (0) | 2019.09.19 |
---|---|
DarkWeb Research [1] (4) | 2019.06.07 |
DarkWeb Research [0] (0) | 2019.02.10 |
python 파씽 requests,BeautifulSoup (1) | 2017.09.13 |
세종대 카카오 봇 (옐로우 아이디) Sejongbot (0) | 2017.09.13 |
댓글