Port
포트
• 프로그램이 네트워크 통신을 위하여 소켓에 부여한 번호
Ex) FTP는 20, 21번 사용, SSH는 22번, Telnet은 23번 사용 등
• 포트를 열어 놓으면 언제든 통신이 가능하나, 공격자에게 취약점을 노출시킬 수 있음
포트 스캐너
• 정보수집의 단계로, 공격 대상이 어떤 취약점을 가지고 있는지 파악하는 작업
• 실무에서는 공격자들로부터 취약점 노출을 최소화하기 위해 포트 스캔을 정기적으로 사용
• 사용하지 않는 포트들을 관리하여 불필요한 외부 접촉을 줄이는 등의 노력을 함
포트 번호
• 컴퓨터 내에서 프로그램이 소켓을 요청할 때 부여하는 번호
• 수많은 소켓들을 관리하기 위해 사용
• 포트 번호를 스캔한다 → 컴퓨터 내부로 들어갈 수 있는 길을 찾는 것
TCP
• 신뢰성 있는 통신 방식
• 상대 측에서 데이터를 완전히 수신했는지 점검함
• 데이터가 손실되면 다시 전송
• 3way handshake의 연결형
UDP
• 신뢰성이 없는 통신 방식
• 속도를 중시함
• 전송 중에 데이터 손실 가능
• 비연결형
3 way handshake
• TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
• 양쪽 모두 데이터를 전송할 준비가 되었음을 보장하고, 실제로 데이터의 전달이 시작하기 전에 한 쪽에서 상대방이 준비가 되었다는 것을 알 수 있도록 해준다
- 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보냄
- 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK과 SYN flag가 설정된 패킷을 발
송하고 클라이언트가 다시 응답하기를 기다림 - 클라이언트는 서버에게 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 패킷이 돌아옴 • 현재의 보안 기술로는 이를 감지할 수 있기 때문에 큰 필요성이 있는방식은 아님 |
포트가 열려있는지 확인하기 위한 코드이다. addr=()에 들어있는 정보를 변경하여 확인해볼 수 있다.
"www.naver.com"의 80번 포트가 열려있는 것으로 확인된다.
addr=()에 들어갈 값을 변경하여 다시 실행해본다.
열려있는 80번 포트와는 다르게 8080은 닫혀있는 것을 확인할 수 있다.
cmd 창에서 netstat -ano로 열려있는 포트를 확인하였다.
이번에는 같은 작업을 UDP 기반으로 해본다.
500 UDP 포트가 열려있는 것을 확인할 수 있다.
cmd 창에서도 확인할 수 있다.
공격 대상 세팅하기
이번 실습에서는 Metasploitable을 사용한다.
VM으로 Metasploit2.0을 가져와 실행한다.
연결이 무사히 되면 실행했을 때 다음과 같은 화면이 나타난다.
기본 사용자 암호는 msfadmin이다.
로그인이 됐다면 sudo reboot을 입력해 시스템을 리부팅해준다.
리부팅이 완료됐다면 ifconfig를 이용해 inet addr를 찾는다. 192.168.35.77인 것을 확인할 수 있다. 이는 시스템마다 다르기 때문에 확인이 필요하다.
인터넷 브라우저에 들어가 확인한 IP 주소를 입력한다. 위의 화면과 동일하게 실행된다면 성공한 것이다.
초급 포트 스캔
어떤 포트가 열려있는지 탐색하기 위한 코드이다. 찾은 결과는 portScanReuslt.txt에 저장된다. ip에는 metasploitable에서 찾은 주소를 넣으면 된다. 탐색할 포트는 portNums를 조절하여 변경할 수 있다.
실행 결과 1부터9까지의 포트를 모두 탐색하고 portScanResult.txt에 저장되었다.
멀티스레드 (Multi Thread)
스레드 (Thread)
• 프로그램에서 수행하는 명령의 흐름을 동시에 처리하도록 할 수 있음
• 일반적인 프로세스의 경우, 프로그램 명령이 단일적/순차적으로 처리되나, 스레드를 활용하면 병렬적으로 명령을 처리할 수 있어 빠른 작업이 가능함
• 하지만 작업을 수행하는 도중, 동시에 특정 메모리에 접근하게 되면 문제를 일으킬 수 있음
• 여러 개의 스레드 중 하나라도 잘못된 연산을 하게 되면 문제를 일으킬 수 있음
• 디버깅 작업이 어려움
세마포어(Semaphore)
• 특정 작업을 하는 동안에 락(lock)을 걸어 임계구역을 설정하여 다른 스레드가 작업을 하지 않도록 제어함
• CPU가 스레드를 돌아가며 실행하기 때문에 결과를 연속해서 출력하게 함
• 임계구역 설정으로 스레드의 수를 제어할 수 있음
• 자원의 원자성을 보호할 수 있음
• 언락(unlock)을 실행하면 다시 원래대로 동작함
멀티스레드를 이해하기 위한 시뮬레이션 코드이다. 3개의 화장실을 10명의 사람이 이용할 때 어떤 결과가 나올지 출력한다.
실행한 결과는 위와 같다.
멀티 스레드를 port scanner에 적용하여 작성한 코드이다. 실행한 결과는 portScanResult.csv에 저장되어 VM에서 빼오면 엑셀 파일로 열 수 있다.
근데 왜 안될까...하..
nmap 활용
nmap
• 포트 스캐너 공개 소프트웨어
• 스텔스 기능과 OS 전보, 방화벽 필터링 확인 등의 기능 제공
nmap 주요 옵션 | |
-sT | SYN 오픈 스캔 |
-sS | SYN 하프 오픈 스캔 |
-sX | X-mas 스캔 |
-sN | NULL 스캔 |
-sU | UDP 스캔 |
nmap 설치는 위의 사이트에 들어가 Latest stable release self-installer를 다운 받으면 된다.
그리고 cmd 창을 열어 pip 파일이 있는 경로로 이동해준 다음에 pip install python-nmap을 실행해주면 된다.
nmap이 정상적으로 작동하는지 테스트하기 위한 코드이다.
위와 같이 result가 정상적으로 출력되는 것을 볼 수 있다.
IDLE에서도 위와 같이 활용할 수 있다.
IP 127.0.0.1의 포트 20부터 443까지 중에서 필터링한 결과를 출력한다.
135번과 137번 포트에 대한 결과가 출력되었다.
이번에는 나온 결과를 result.csv 파일로 저장하는 코드이다.
실행하면 폴더에 result.csv 파일이 생성되는 것을 확인할 수 있다.
가상환경에 엑셀이 설치되어있지 않아 메모장으로 열었다.
optparse
Optparse
• 기본적으로 제공되는 python 라이브러리
• Argument를 효과적으로 전달함
• 대부분의 프로그램에서 사용하는 옵션이 가능함
• 제작한 툴을 오픈소스화 가능함 (github, exe)
• 동적인 방법으로 기능 제공
아니 나는 kill하라고 한 적이 없다고
어쨌든 마지막은 항상 실패다. :>
'파이썬 IT 해킹, 보안' 카테고리의 다른 글
백도어 개발 (0) | 2020.09.27 |
---|---|
FTTP 프로토콜 (0) | 2020.09.20 |
FTP 프로토콜 (0) | 2020.09.15 |