#2 - Assessments

RINM·2023년 1월 19일
0

Penetration Testing

목록 보기
2/7

Information Gathering

Netcraft

https://sitereport.netcraft.com/을 통해 웹 페이지 정보를 조회할 수 있다. 네트워크 정보부터 해당 사이트를 운영하는 호스팅 업체의 정보, 웹 페이지 메타데이터부터 사용하는 언어, 프레임 워크 등 전반적인 정보를 확인할 수 있다.

기본 예시로 주어지는 netcraftf 홈페이지 리포트. IP주소와 DNS 정보, 사용 프로토콜 정보 등을 확인할 수 있다.

Whois Lookups

whois를 사용하면 도메인 등록시 기록된 도메인 정보를 조회할 수 있다.

도메인 등록 일자, 도메인 등록 기관, 도메인 소유주, 위치 정보 등 도메인 관련 정보를 얻을 수 있다.

Nslookup

해당 도메인의 DNS 정보를 출력한다.

Nslookup 설정을 통해서 해당 도메인이 사용하는 메일 주소 또한 검색할 수 있다.

Host

해당 도메인의 서버 이름을 검색할 수 있다.

Zone Transfers

DNS가 도메인 정보를 동기화하는 과정(zone transfer)에서 DNS 기록들이 노출되기도 한다. 따로 보안 설정을 해주지 않느 ㄴ경우 DNS 기록을 host 명령어를 통해 다운로드할 수 있다.

TheHarvester

google, bing, pgp 등의 검색 엔진을 통해 가능한 이메일 주소를 탐색한다. 이메일 주소는 시스템 username과 연관있는 경우가 크기 때문에 시스템에 접근할 때 유용하게 쓰인다.

Maltego

sudo apt-get install maltego

cmd 창에 maltego를 입력하면 GUI창이 뜬다.

Community 버전은 무료로 사용할 수 있다. 홈페이지에서 가입한 후 로그인한다.

Entity Palette>Infrastructure>Domain을 선택해 그래프 위로 가져온다. 아이콘을 더블클릭하여 목표 도메인을 설정할 수 있다. 아이콘을 우클릭하여 Transform을 실행한다.


To DNS Name - MX를 실행한 결과이다. 예시로 주어진 paterva.com은 patevra-com.mail을 사용하고 있는 것을 알 수 있다. 이 외에도 다양한 transform이 가능하다.
To Website를 실행하면 해당 도메인의 웹 사이트 주소를 알 수 있다. 웹 사이트에서 To Web Technologies를 실행하면 해당 웹 사이트가 사용하는 기술들을 볼 수 있다.

Port Scanning

표적 시스템이 어떤 소프트웨어를 사용하는지, 어떤 서비스가 실행 중인지 알기 위하여 시스템의 포트를 스캔한다.
netcat, telnet 등을 사용하여 직접 알려진 포트들의 상태를 짐작할 수 있다. 직접 구축한 취약한 win xp의 25번 포트를 netcat을 이용하여 스캔한다.

위와 같이 SMTP 서버가 실행되고 있는 것을 확인할 수 있다. SMTP 서버의 버전까지도 알 수 있다.

Nmap

SYN Scan

TCP handshake를 진행하여 포트를 스캔한다. SYN 패킷을 목표 포트에 전송한다. SYN-ACK 패킷이 돌아오지 않으면 해당 포트는 서비스가 실행되지 않고 있는 것이거나 패킷이 필터링되는 등 차단된 것이다. 서비스 체크만 할 뿐 SYN-ACK 패킷이 돌아와도 ACK 패킷을 보내지는 않는다.
NMAP의 스캔 데이터를 XML 포멧으로 저장하면 다른 툴에 이를 활용할 수 있다. -oA 옵션을 사용하면 .nmap, .gnmap, xml 형식의 로그가 모두 저장된다.

sudo nmap -sS [타깃 IP] -oA [로그 저장 경로]

Version Scan

각 포트의 동작 여부를 넘어 어떤 소프트웨어가 해당 포트를 사용하고 있는지까지 분석한다.

sudo nmap -sV [타깃 IP] -oA [로그 저장 경로]

각 포트를 이용하는 소프트웨어와 그 버전까지도 출력해준다.

UDP Scan

UDP 패킷을 보내어 UDP 포트를 스캔한다. 포트가 닫혀있는 경우 돌아오는 ICMP Port Unreachable message로 판별할 수 있다. 방화벽 필터링에 의하여 차단될 수 있기 때문에 정확도가 높지는 않다.

특정 포트 스캔

nmap은 기본 설정된 1000개의 포트만 스캔한다. -p 옵션으로 특정 포트를 지정하여 스캔할 수 있다.

Finding Vulnerabilities

Nessus

새로운 policy를 생성한다. nessus의 policy는 스캔을 하기 위한 설정 파일이다.

새로운 scan을 생성한다. win XP의 IP주소를 타깃으로 입력한다. 생성 후 Launch를 눌러 스캔을 시작한다.

스캔이 진행되는 상황을 볼 수 있다.

발견된 취약점의 위험도(CVSS rank)와 각 취약점에 대한 설명도 함께 제공된다.

Nmap Scripting Engine(NSE)

kali linux의 /usr/share/nmap/scripts 에서 Nmap 기반의 취약점 스캐닝 툴인 NSE의 스크립트를 발견할 수 있다.
nmap의 -sC 옵션을 사용하여 NSE의 default script를 사용한 취약점 스캔을 시행할 수 있다.

win XP를 스캐닝한 위 결과에 따르면 25번 포트에서는 smtp 서비스가 작동 중이며 VRFY 명령어를 사용할 수 있다. VRFY 명령어는 특정 사용자이름이 메일 서버에 존재하는지 알 수 있는 명령어로 이를 통해서 credential-guessing attack을 시도해볼 수 있다.

--script 옵션을 사용하여 특정 스크립트만 실행시키는 것도 가능하다. 예를 들어 nfs-ls 스크립트는 타깃 시스템의 nfs에 접근하여 공유된 데이터를 나열(ls)한다.

타깃 Ubuntu 시스템을 nfs-ls 스크립트로 스캔하면 다음과 같이 nfs로 공유된 파일 정보를 볼 수 있다.

Metasploit Scanner Module

metasploit의 다양한 스캐너 모듈을 이용한다.
use 명령어를 통해 사용할 모듈을 지정하고 set RHOST를 통해 타깃의 IP 주소를 설정한다. exploit 명령어를 통해 스캐닝을 시작한다.

타깃 win XP에 anonymous 접근이 허용된 FTP가 있는지 스캔하기 위하여 scanner/ftp/anonymous 모듈을 이용했다. 위와 같이 FileZilla로 제공되는 FTP 서비스의 anonymous 접근이 enable된 상태임을 확인할 수 있다.
exploit 대신 check 명령어를 사용하여 취약점을 확인할 수도 있다.

Nikto

web application 취약점 스캐너이다. 위험한 파일, 경과된 버전, 잘못된 설정 등의 문제를 찾아낸다. -h 옵션을 통하여 타깃 ip를 설정한다.

Manual Analysis

도구를 사용하지 않고 직접 취약점을 찾을 수도 있다. 만약 취약점 분석 도구가 특정 포트의 스캐닝에 실패했다면 브라우저를 사용하여 직접 그 포트에 접속해볼 수도 있다. 그 포트에서 웹서버가 동작한다면 웹 페이지로 로딩될 수도 있다. 웹서버라면 netcat 등을 사용하여 시스템에 접근할 수 있을 것이다.
사용자이름을 찾아내는 것도 효과적인 방법이다. 앞서 찾았던 SMTP 서비스의 VRFY 명령어를 사용하여 존재할 법한 사용자 이름의 존재여부를 확인할 수도 있다.

Capturing Traffic

내부자 공격인 경우, 트래픽을 분석하고 패킷을 캡쳐하는 것만으로도 많은 정보를 얻을 수 있다. 허브를 쓰는 네트워크의 경우 모든 패킷이 브로드캐스팅되기 때문에 손쉽게 패킷을 얻을 수 있다. 반면 스위치를 쓰는 경우 각 패킷이 목적지 시스템으로만 전달되기 때문에 네트워크를 속이지 않는한 접근하기 쉽지 않다. 타깃 가상 머신이 동작하고 있는 네트워크는 호스트 네트워크 카드를 통해 통신하므로 허브 네트워크와 비슷한 환경이다. wireshark의 promiscuous 모드를 사용하는 것만으로도 네트워크에서 사용되는 모든 패킷을 들여다볼 수 있다. 반대로 promiscuous 모드를 사용하지 않으면 조금 더 실전에 가까운 네트워크에서 pentest를 시도해볼 수 있다.

Wireshark

와이어샤크는 Ethernet, 무선, 블루투스 등 다양한 트래픽을 캡쳐할 수 있다. 또한 이 트래픽을 프로토콜 별로 분석하고 디코드하여 보여준다.

Capturing Traffic

와이어샤크의 Capture>Options에서 eht0을 선택한다. promiscuous 모드를 해제한다.

start 버튼을 클릭하여 캡쳐링을 시작한다. kali 리눅스에서 들어오고 나가는 모든 트래픽이 캡쳐링된다.

앞서 살펴본 WinXP 타깃의 FTP 취약점(anonymous로 로그인 가능)을 이용하여 접근한다.

winXP와 kali의 FTP 통신 패킷을 와이어샤크로 확인할 수 있다.

Following TCP Stream

원하는 패킷을 우클릭하여 Follow 기능을 사용하면 그 패킷과 관련된 대화를 확인할 수 있다.

kali에서 winXP의 FTP에 로그인할 때 주고 받은 값들을 확인할 수 있다. 비밀번호 또한 평문 그대로 전송되고 있는 것을 확인할 수 있다.

ARP Cache Poisoning

스위치 네트워크에서 kali에게 향하지 않는 패킷을 캡쳐링하기 위해서는 다른 방법이 필요하다. 타깃이나 스위치를 속여 특정 트래픽이 kali에게 가는 것이도록 만들 필요가 있다. Man-in-the-middle 공격으로 두 시스템 간의 트래픽을 가로채 패킷을 캡쳐할 수 있다. 그 중 한 방법이 ARP Cache Poisoning이다.

ARP

한 시스템이 다른 시스템과 통신하기 위해서는 그 시스템의 IP 주소와 MAC 주소를 알아야한다. 이때 IP주소는 알고 MAC 주소를 알 수 없는 경우 ARP를 사용하여 해당 IP주소를 사용하는 시스템의 MAC 주소를 네트워크의 모든 시스템에 질의한다. MAC 주소를 응답 받으면 IP주소와 MAC 주소가 맵핑되어 ARP cache에 저장된다. 그 이후 통신시부터는 해당 IP 주소의 MAC 주소를 ARP cache에서 찾아 패킷을 전송한다. 만약 ARP cache에 없는 IP주소라면 네트워크에 다시 ARP 요청을 broadcast한다. ARP cache는 주기적으로 비워지기 때문에 시스템은 주기적으로 ARP broadcast 요청을 보낸다.

arp 명령어를 통해 리눅스 시스템의 ARP cache를 확인할 수 있다.
와이어샤크 캡쳐링을 리셋한 후 ubuntu 타깃의 FTP에 anonymous로 로그인을 시도한다. ARP 테이블에 ubuntu 타깃의 정보가 없으므로 kali는 ARP 요청을 보낼 것이다.

kali의 broadcast 요청과 타깃 ubuntu의 응답이 캡쳐되었다. 다시 kali의 arp cache를 확인하면 타깃 ubuntu의 정보가 등록된 것을 확인할 수 있다.

ARP 질의의 문제점은 응답한 시스템이 정말 해당 IP주소를 가진 시스템이 맞는지 확인하지 않고 응답을 cache에 기록한다는 것이다. 따라서 공격자가 네트워크 내의 다른 시스템인척 ARP 요청에 응답하여 ARP cache를 오염시킬 수 있다. 이렇게 하면 공격자의 시스템으로 의도치 않은 패킷들이 전송되어 공격자는 패킷을 캡쳐링하는 중간자 공격을 성공할 수 있다. 두 시스템이 통신하는 중간에서 패킷을 받고 다시 진짜 목적지로 전달해주면 공격자의 존재가 들키지 않고 network sniffing를 수행할 수 있다.

IP Forwarding

kali에 IP forwarding 기능을 실행시켜야 캡쳐한 패킷을 원 목적지로 다시 보내줄 수 있다. kali에 다음과 같이 입력하여 IP forward 기능을 허용한다. (root emulator 이용)

echo 1 > /proc/sys/net/ipv4/ip_forward

Arpspoof

공격전, ubuntu target의 ARP Cache는 다음과 같다.

kali의 IP에 c9로 끝나는 MAC 주소가, win XP에 06으로 끝나는 MAC 주소가 맵핑되어 있다.
arpspoof는 ARP cache poisoning에 이용되는 툴이다. 네트워크 인터페이스와 타깃의 IP 주소, 가장할 IP주소를 입력한다.

arpspoof -i [interface] -t [target IP] [marquerade IP]

타깃 Ubuntu가 kali를 win XP로 인식하도록 arpspoof를 실행한다.

arpspoof가 자동으로 ARP 응답을 보내기 시작한다.
반대로 winXP가 kali를 Ubuntu로 인식하도록 arpspoof를 실행한다. ARP cache가 업데이트 되는 시기는 제각각이지만 대체로 1분 안에 ARP 변조가 완료된다.

Ubuntu에서 다시 ARP Cache를 확인하면 win XP의 IP에 kali의 MAC 주소가 맵핑되어있는 것을 발견할 수 있다.

win XP의 ARP cache도 성공적으로 변조되었다.

이제 타깃 Ubuntu에서 windows XP의 FTP 서버로 접속을 시도한다. (kali의 wireshark 캡쳐링을 켠 상태를 유지)

ubuntu와 win XP의 통신이 kali의 wireshark에서 캡쳐링된다.

redirect된 ICMP 패킷과 캡쳐링 후 재 전송된 TCP 패킷들을 볼 수 있다. 특히 password가 평문으로 전송되고 있는 것을 확인할 수 있다.

default gateway인척 가장하는 것도 가능하다.
타깃 ubuntu에게 보내는 arpspoof의 가장할 주소를 default gateway로 변경한다. 마찬가지로 defualt gateway에게도 kali가 타깃 ubuntu인척 가장한다. 이후 타깃 ubuntu에서 브라우저로 인터넷에 접근할 때 통신한 모든 패킷이 kali에 캡쳐링된다.

DNS Cache Poisoning

DNS는 도메인 이름과 IP주소를 맵핑한다. nslookup 명령어로 특정 도메인과 연결된 IP 주소를 확인할 수 있다.

DNS는 시스템이 DNS에 도메인 이름을 질의하면 DNS에서 도메인 이름에 맵핑된 IP주소를 답하는 것으로 동작한다. 만약 DNS의 cache에 해당 도메인이 없다면 다른 DNS에 질의하여 IP주소를 찾는다.

Dnsspoof

DNS Cache Poisoning은 ARP Cache Poisoning과 유사하게 DNS인척 해당 도메인과 다른 IP주소 응답을 보내어 시스템을 속인다.

먼저 apache2를 구동한다.

속일 도메인과 IP주소 쌍을 기록한 파일을 만든다. 예를 들어 www.gmail.com의 IP주소를 kali의 IP주소로 맵핑한다.

dnsspoof를 사용하여 타깃 ubuntu와 default gateway를 속인다. 이전의 arpspoof를 유지하고 있어야한다. -f 옵션으로 작성한 파일을 명시한다.

dnsspoof -i [interface] -f [hosts.txt]

타깃 ubuntu에서 nslookup으로 www.gmail.com을 요청한다. 정상적인 gmail.com의 IP 주소 대신 kali의 IP주소로 변경된 것을 볼 수 있다.

SSL Attacks

SSL(Secure Sockets Layer)

SSL은 통신을 암호화하여 전달한다. SSL은 통신이 안전한 것을 증명하기 위하여 인증서 체계를 사용한다. SSL이 적용된 사이트에 접속하면 서버가 인증서를 제공하고 브라우저가 그 인증서를 확인한다. 브라우저가 인증서를 받아들이면 서버에게 이를 알리고, 서버는 전자서명한 승인서를 반환하여 SSL로 보호된 통신이 시작된다.

Ettercap

SSL MITM 공격을 수행하는 도구. -T 옵션으로 text-based로 실행할 수 있다. -M 옵션으로 게이트웨이와 타깃을 설정한다.

ettercap -Ti [interface] -M arp:remote /[default gateway]/ /[target IP]/

MITM 공격이 성공하면 타깃 사용자의 브라우저에는 인증서 경고가 뜬다. 이를 무시하고 진행하면 공격자는 SSL 통신의 평문을 볼 수 있다.

SSL Stripping

SSL로 리다이렉트 되기 전에 HTTP 통신에 중간자 공격을 실행하여 사용자의 브라우저에 인증서 경고가 뜨지 않도록한다. HTTPS 태그를 제거하여 SSL을 우회하여 사용자에게 패킷을 전달한다.

SSLstrip

SSL stripping을 수행하기에 앞서 iptable의 규칙을 수정해야한다. 다음과 같이 80번 포트로 향하는 트래픽이 SSLstrp을 통해 나가도록 설정한다.

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080

SSLstrip을 -l 옵션으로 8080번 포트를 지정하여 실행한다.

타깃 Ubuntu에서 https 페이지에 접근하면 http 태그로 바뀌어 접속되는 것을 볼 수 있다.

0개의 댓글