본문 바로가기

파이썬 IT 해킹, 보안

포트 스캐너 개발

Port


포트

• 프로그램이 네트워크 통신을 위하여 소켓에 부여한 번호
Ex) FTP는 20, 21번 사용, SSH는 22번, Telnet은 23번 사용 등
• 포트를 열어 놓으면 언제든 통신이 가능하나, 공격자에게 취약점을 노출시킬 수 있음

 

포트 스캐너

• 정보수집의 단계로, 공격 대상이 어떤 취약점을 가지고 있는지 파악하는 작업
• 실무에서는 공격자들로부터 취약점 노출을 최소화하기 위해 포트 스캔을 정기적으로 사용
• 사용하지 않는 포트들을 관리하여 불필요한 외부 접촉을 줄이는 등의 노력을 함

 

포트 번호

• 컴퓨터 내에서 프로그램이 소켓을 요청할 때 부여하는 번호
• 수많은 소켓들을 관리하기 위해 사용
• 포트 번호를 스캔한다 → 컴퓨터 내부로 들어갈 수 있는 길을 찾는 것

 

TCP

• 신뢰성 있는 통신 방식
• 상대 측에서 데이터를 완전히 수신했는지 점검함
• 데이터가 손실되면 다시 전송
• 3way handshake의 연결형

 

UDP

• 신뢰성이 없는 통신 방식
• 속도를 중시함
• 전송 중에 데이터 손실 가능
• 비연결형

 

3 way handshake

• TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
• 양쪽 모두 데이터를 전송할 준비가 되었음을 보장하고, 실제로 데이터의 전달이 시작하기 전에 한 쪽에서 상대방이 준비가 되었다는 것을 알 수 있도록 해준다

  1. 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보냄
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK과 SYN flag가 설정된 패킷을 발
    송하고 클라이언트가 다시 응답하기를 기다림
  3. 클라이언트는 서버에게 ACK을 보내고 그 이후로 연결이 이루어지고, 데이터가 오가게 됨

 

TCP, UDP 포트 스캔


스캔의 종류
ARP 스캔 ICMP 스캔
• ARP 프로토콜을 이용해서 네트워크 대역의 정보를 확인함 

• 같은 네트워크 대역에서 ARP Request를 보내고, 살아있는 호스트는 ARP Reply로 응답하여 공격자가 상대방의 존재 유무를 알 수 있게 함 

• 해당 프로토콜이 2계층 프로토콜이기 때문에 라우터를 넘지 않아 같은 네트워크의 정보만 알 수 있음
• ICMP 프로토콜을 이용한 스캔과 희생자 서버의 작동 여부를 알 수 있음

• ping [대상 ip]의 형태로 스캔이 가능해 TTL값을 알 수 있음 → 대상의 OS를 확인 가능함

• 현재는 보안 장비가 ping을 막음
TCP/UDP 스캔
TCP Open 스캔 TCP Half Open 스캔
• 열린 포트에 대해 완전한 세션을 연결하여 활성화 상태 파악
• Open이 예상되는 포트에 SYN 패킷을 보내면 포트가 열린 경우, 서버에서 SYN+ACK 패킷이 돌아오고 공격자는 ACK패킷을 보냄
• 포트가 닫힌 경오, RST+ACK패킷이 돌아오고 공격자는 아무 패킷도 보내지 않음
• 3way handshaking의 정상 포트스캔 과정으로 ACK을 받는 경우 로그 기록이 남음
 SYN 패킷을 보내면 포트가 열린 경우, 서버는 SYN+ACK 패킷을 보내고, 공격자는 즉시 연결을 끊는 RST패킷을 보내어 로그 기록을 남기지 않음

 포트가 닫힌 경우, RST+ACK패킷이 돌아오고, 공격자는 아무 패킷도 보내지 않음
스탤스 스캔  
• 로그를 남기지 않으며, 공격 대상을 속이고 자신의 위치를 숨기는 스캔 
• 세션을 완전히 성립하지 않고 공격 대상 시스템의 포트 활성화 여부를 알기 때문에 로그가 남지 않음 
• FIN, NULL, XMAS 스캔이 있으며, 패킷을 보내서 열린 경우 응답이 없고, 닫힌 경우에는 RST 패킷이 돌아옴 
• 현재의 보안 기술로는 이를 감지할 수 있기 때문에 큰 필요성이 있는방식은 아님
 

 

 

tcp_scan.py

포트가 열려있는지 확인하기 위한 코드이다. addr=()에 들어있는 정보를 변경하여 확인해볼 수 있다.

 

tcp_scan.py 실행 결과

"www.naver.com"의 80번 포트가 열려있는 것으로 확인된다.

 

addr=()에 들어갈 값을 변경하여 다시 실행해본다.

 

열려있는 80번 포트와는 다르게 8080은 닫혀있는 것을 확인할 수 있다.

 

cmd 창에서 netstat -ano로 열려있는 포트를 확인하였다.

 

tcp_scan2.py

이번에는 같은 작업을 UDP 기반으로 해본다.

 

tcp_scan2.py 실행 결과

500 UDP 포트가 열려있는 것을 확인할 수 있다.

 

cmd 창에서도 확인할 수 있다.

 

 

공격 대상 세팅하기


이번 실습에서는 Metasploitable을 사용한다.

 

VM으로 Metasploit2.0을 가져와 실행한다.

 

연결이 무사히 되면 실행했을 때 다음과 같은 화면이 나타난다.

기본 사용자 암호는 msfadmin이다.

로그인이 됐다면 sudo reboot을 입력해 시스템을 리부팅해준다.

 

리부팅이 완료됐다면 ifconfig를 이용해 inet addr를 찾는다. 192.168.35.77인 것을 확인할 수 있다. 이는 시스템마다 다르기 때문에 확인이 필요하다.

 

인터넷 브라우저에 들어가 확인한 IP 주소를 입력한다. 위의 화면과 동일하게 실행된다면 성공한 것이다.

 

초급 포트 스캔


Back_PortScan.py

어떤 포트가 열려있는지 탐색하기 위한 코드이다. 찾은 결과는 portScanReuslt.txt에 저장된다. ip에는 metasploitable에서 찾은 주소를 넣으면 된다. 탐색할 포트는 portNums를 조절하여 변경할 수 있다.

 

Back_PortScan.py 실행 결과

실행 결과 1부터9까지의 포트를 모두 탐색하고 portScanResult.txt에 저장되었다.

 

 

멀티스레드 (Multi Thread)


스레드 (Thread)

• 프로그램에서 수행하는 명령의 흐름을 동시에 처리하도록 할 수 있음
• 일반적인 프로세스의 경우, 프로그램 명령이 단일적/순차적으로 처리되나, 스레드를 활용하면 병렬적으로 명령을 처리할 수 있어 빠른 작업이 가능함
• 하지만 작업을 수행하는 도중, 동시에 특정 메모리에 접근하게 되면 문제를 일으킬 수 있음
• 여러 개의 스레드 중 하나라도 잘못된 연산을 하게 되면 문제를 일으킬 수 있음
• 디버깅 작업이 어려움

 

세마포어(Semaphore)

• 특정 작업을 하는 동안에 락(lock)을 걸어 임계구역을 설정하여 다른 스레드가 작업을 하지 않도록 제어함
• CPU가 스레드를 돌아가며 실행하기 때문에 결과를 연속해서 출력하게 함
• 임계구역 설정으로 스레드의 수를 제어할 수 있음

• 자원의 원자성을 보호할 수 있음
• 언락(unlock)을 실행하면 다시 원래대로 동작함

 

toilet_simulation.py

멀티스레드를 이해하기 위한 시뮬레이션 코드이다. 3개의 화장실을 10명의 사람이 이용할 때 어떤 결과가 나올지 출력한다.

toilet.simulation.py 실행 결과

실행한 결과는 위와 같다.

 

multi_thread_portscanner.py

멀티 스레드를 port scanner에 적용하여 작성한 코드이다. 실행한 결과는 portScanResult.csv에 저장되어 VM에서 빼오면 엑셀 파일로 열 수 있다.

근데 왜 안될까...하..

 

 

nmap 활용


nmap
• 포트 스캐너 공개 소프트웨어
• 스텔스 기능과 OS 전보, 방화벽 필터링 확인 등의 기능 제공

 

nmap 주요 옵션
-sT SYN 오픈 스캔
-sS SYN 하프 오픈 스캔
-sX X-mas 스캔
-sN NULL 스캔
-sU UDP 스캔

 

https://nmap.org/

 

Nmap: the Network Mapper - Free Security Scanner

Nmap 7.80 was released for DEFCON 27! [release notes | download] Nmap 7.70 is now available! [release notes | download] Nmap turned 20 years old on September 1, 2017! Celebrate by reading the original Phrack #51 article. #Nmap20! Nmap 7.60 is now available

nmap.org

nmap 설치는 위의 사이트에 들어가 Latest stable release self-installer를 다운 받으면 된다.

 

그리고 cmd 창을 열어 pip 파일이 있는 경로로 이동해준 다음에 pip install python-nmap을 실행해주면 된다.

 

nm_test.py

nmap이 정상적으로 작동하는지 테스트하기 위한 코드이다.

nm_test.py 실행 결과

위와 같이 result가 정상적으로 출력되는 것을 볼 수 있다.

 

IDLE에서도 위와 같이 활용할 수 있다.

 

nm_result.py

IP 127.0.0.1의 포트 20부터 443까지 중에서 필터링한 결과를 출력한다.

 

nm_result.py 실행 결과

135번과 137번 포트에 대한 결과가 출력되었다.

 

nm_csv.py

이번에는 나온 결과를 result.csv 파일로 저장하는 코드이다.

 

실행하면 폴더에 result.csv 파일이 생성되는 것을 확인할 수 있다.

 

가상환경에 엑셀이 설치되어있지 않아 메모장으로 열었다.

 

optparse


Optparse

• 기본적으로 제공되는 python 라이브러리
• Argument를 효과적으로 전달함
• 대부분의 프로그램에서 사용하는 옵션이 가능함
• 제작한 툴을 오픈소스화 가능함 (github, exe)
• 동적인 방법으로 기능 제공

 

calc_optparse.py
calc_optparse.py 실행 결과

아니  나는 kill하라고 한 적이 없다고

어쨌든 마지막은 항상 실패다. :>

'파이썬 IT 해킹, 보안' 카테고리의 다른 글

백도어 개발  (0) 2020.09.27
FTTP 프로토콜  (0) 2020.09.20
FTP 프로토콜  (0) 2020.09.15