본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
개발

Tor 프록시를 타는 Port Scanner를 만들자. [0]

by intadd 2019. 7. 1.

안녕하세요

 

저번 플젝 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

 

se55i0n/PortScanner

目标tcp端口快速扫描、banner识别、cdn检测. Contribute to se55i0n/PortScanner development by creating an account on GitHub.

github.com

여기서 기능 추가 및 약간의? 코드 수정만 했습니다. 

 

추가한 기능 

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

 

'개발' 카테고리의 다른 글

Mac iterm2 전체 화면 설정  (0) 2021.02.10
SNS 검색 플젝(Sherlock)을 분석&개발해보자 [0]  (0) 2019.09.19
DarkWeb Research [1]  (2) 2019.06.07
DarkWeb Research [0]  (0) 2019.02.10
python 파씽 requests,BeautifulSoup  (1) 2017.09.13

댓글