목차 Ⅳ. 스캐닝 (Scanning) 1. 활성화된호스트식별 2. 포트스캔
1. 활성화된 Host 식별 ping 침투테스트범위에있는 IP 주소만목록화 현재동작중인시스템확인 Ping - ICMP(Internet Control messaging Protocol) 패킷을사용 - echo request, echo reply 패킷 - target 시스템이 off상태이거나, ICMP패킷을차단하는경우 Destination Host Unreachable 메시지 - 유의점 ) 네트워크문제로인해이런메시자가보이기도함 - 신뢰성이떨어짐 권장하지않음 ( 차단하거나, 알려질수있음 )
1. 활성화된 Host 식별 ping ICMP - 인터넷제어메시지프로토콜 (Internet Control Message Protocol) - IP 프로토콜의오류제어및지원, 통보메커니즘이없다는것을보완 TTL 필드가 0 이되어라우터가 datagram 을폐기할경우 주어진시간내에 datagram 의모든조각 ( 단편 ) 을수신하지못해, 목적지호스트가폐기한경우 해당호스트가 off 상태인경우등 알릴메커니즘이없다 - 네트워크계층프로토콜 - 데이터링크계층으로직접전달되지않음 (IP datagram 내에캡슐화 )
1. 활성화된 Host 식별 ping ICMP 메시지 - 오류보고메시지 (Error-reporting) : 라우터 or 목적지호스트가 IP패킷을처리하는도중발견되는메시지보고 - 질의메시지 (Query) : 라우터 or 다른호스트의정보를획득하기위해사용하는메시지
1. 활성화된 Host 식별 ICMP 메시지 ping
1. 활성화된 Host 식별 ICMP 메시지 ping Echo request 메시지를강제종료전까지계속전송 Echo request 메시지를 4 개전송후, 자동으로종료
1. 활성화된 Host 식별 ping arping - ARP패킷을이용한 live호스트식별 - OSI L2에서동작 ( 로컬네트워크에위치한호스트들에게만사용가능 ) - ARP는라우터나게이트웨이를넘어갈수없음 - http://www.habets.pp.se/synscan/programs.php?prog=arping
1. 활성화된 Host 식별 arping ping 192.168.0.132 를찾기위해 ARP request 를 Broadcast 를 3 번보냄 192.168.0.132 를찾은경우 : - MAC address 를알려주는 ARP response 수신 => 해당호스트 Live 상태 192.168.0.132 를못찾은경우 : - ARP response 없음
1. 활성화된 Host 식별 Ping sweep Ping sweep - 특정 IP주소범위안에있는모든장비에자동으로 ping 패킷을보내어활성화된시스템을찾는것 - 특정범위안에있는모든장비에따로따로 ping 패킷을보내는것 ( 매우비효율적 ) netenum - 살아있는 host 들을빠르게출력하는 ping sweep 도구 - ICMP echo request 패킷사용 - 위치 : /usr/sbin/netenum ( 백트렉 : /pentest/enumeration/irpas) - 실행 : #netenum < 스캔할네트워크대역 > <timeout> <verbosity> - timeout을사용하지않으면, 오탐발생 ( 모든 host ip출력 )
스캔 TCP 연결설정 - 3way handshaking TCP 연결종료 - 4way handshaking SYN FIN ( 연결종료요청 ) SYN + ACK ACK ( 연결종료승인 ) FIN ( 연결종료요청 ) ACK ACK ( 연결종료승인 )
스캔 TCP 연결리셋 (Connection Reset) - 연결이파기되었음을의미 (1) 존재하지않은 Port 로연결을요청한경우 - Target TCP 는연결을파기하기위해 RST 전송 (2) 비정상적인상황이므로연결중단 SYN 비정상적상황발생 RST ACK + RST 포트가 close 상태이므로연결종료요청 (3) 다른쪽이긴시간동안휴지상태인경우, 연결종료요청 2 RST 1 장시간휴지상태
스캔 스캔순서 TCP open 스캔 UDP 스캔 크리스마스트리스캔 NULL 스캔
Nmap 옵션 nmap
Nmap 옵션 nmap
Nmap 옵션 nmap
Nmap 옵션 nmap
Nmap 포트상태 nmap - 포트스캔결과에따른포트상태정보
UDP 스캔 UDP 스캔 - UDP 를이용한포트스캔 - 모든서비스가 TCP 프로토콜을사용하는것이아님 (UDP 사용 : DHCP, DNS, SNMP, TFTP 등 ) - 매우느림 (-p-, -Pn 옵션을사용하지않음 ) (X)
UDP 스캔 UDP 스캔 - UDP 를이용한포트스캔 (-su 옵션 ) 빠른 UPD 스캔 #nmap suv T4 F --version-intensity 0 192.168.100.130 open filtered ( 오픈 차단 ) => UDP 스캔할때, 응답을받지못한경우 ( 열려있는지, 방화벽으로차단되었는지구별하기어려움 ) 모든포트가 open filtered 인경우 ( 즉, 반응이없는경우 ) - 버전스캔 (-sv) 를통해응답이있는경우, open 으로변경
UDP스캔 유니콘스캔 (Unicornscan) - 정보수집툴이면서, 상관관계탐지툴로, 속도가빠르고정확성우수함 - UDP스캔에소요되는시간을단축가능 ( 빠른 UDP스캔 ) - PPS (Packets Per Second) => 초당얼마나많은패킷을보낼것인가를정의할수있음 (PPS, 초당보내는패킷수 default PPS : 300) -r옵션으로변경가능 비동기적으로세션상태를유지하지않는 TCP 포트스캐닝비동기적으로세션상태를유지하지않는 TCP 배너수집비동기적으로 UDP 포트스캐닝원격 OS와애플리케이션의능동및수동식별
UDP 스캔 유니콘스캔 (Unicornscan) - UDP 스캔 (-m U) / 상세정보출력 (-Iv) / 1-65535 번포트까지스캔 / -r <PPS 값 > ( 예 : -r 10000 )
TCP Open 스캔 TCP Open 스캔 - TCP를이용한포트스캔 - 3-way handshaking 과정으로 log기록이남는다. Nmap - 가장많이사용되는포트 1000개를스캔 => -p- 옵션사용하여모든포트스캔 - 포트스캔하기전에직접어떤컴퓨터가작동중인지먼저확인하고, 응답하지않은컴퓨터에대하여포트스캔을하지않고건너뜀 => -Pn 옵션사용하여건너뛰지않고스캔수행 포트가닫혀있으므로 RST 를보냄
TCP Open 스캔 - 옵션 : -st TCP Open 스캔 가장많이사용하는포트 1000 개에대한스캔
TCP Open 스캔 - 옵션 : -p- -Pn TCP Open 스캔 -p- : 모든포트를대상으로스캔시도 -Pn : 검색하지않았던 port 까지검색 (Unknown)
TCP Open 스캔 스텔스 (Stealth) 스캔 - Log 기록을남기지않는다 TCP half Open 스캔 (= SYN 스캔 ) (Stealth scan) - 완전한세션을성립하지않고, port 활성화여부확인 (log 가남지않음 ) 포트가살아있어 연결설정을위해 SYN + ACK 를보냄 포트가닫혀있으므로 RST 를보냄 포트가살아있는것만확인한후 연결을강제로종료하기위해 RST 를보냄
스텔스 (stealth) 스캔 TCP half Open 스캔 (= SYN 스캔 ) (Stealth scan) - 완전한세션을성립하지않고, port 활성화여부확인 (log 가남지않음 ) 포트가살아있어 연결설정을위해 SYN + ACK 를보냄 포트가살아있는것만확인한후 연결을강제로종료하기위해 RST 를보냄 포트가닫혀있으므로 RST 를보냄 SYN 무응답포트 SYN ( 재전송 ) 1. 방화벽에의해막혔거나 2. 호스트다운된경우
스텔스 (stealth) 스캔 TCP half Open 스캔 (= SYN스캔 ) (Stealth scan) - 완전한세션을성립하지않고, port활성화여부확인 (log가남지않음 ) - -ss 옵션 - --packet-trace 옵션 : 송수신된패킷출력 - -p포트번호 : 해당포트번호에대하여스캔 예 ) #nmap ss d --packet-trace p22,80 192.168.41.129
스텔스 (stealth) 스캔 FIN 스캔 (Stealth scan) FIN 세션연결이없었으므로 FIN 패킷을받으면무시해버림 X 응답하지않음 FIN Open filtered - 열려있거나필터링당했다는의미구별못함 존재하지않은포트비정상적인상황이므로연결중단요청을위해 RST 전송
스텔스 (stealth) 스캔 X-mas 스캔 (Stealth scan) - TCP의 control 필드에서, FIN, URG, PSH플래그를 1로설정하여스캔 - 유닉스 / 리눅스시스템을대상으로사용가능 - 윈도우시스템을대상으로활용불가 - 옵션 : -sx (-p- -Pn옵션함께사용 ) FIN, PSH, URG 무시해버림 X 응답하지않음 FIN, PSH, URG
스텔스 (stealth) 스캔 NULL 스캔 (Stealth scan) - TCP의 control 필드에플래그를모두 0로설정하여스캔 - 유닉스 / 리눅스시스템을대상으로사용가능 - 윈도우시스템을대상으로활용불가 - 옵션 : -sn (-p- -Pn옵션함께사용 ) NULL 무시해버림 X 응답하지않음 NULL
스텔스 (stealth) 스캔 --scanflags 옵션 - 자신만의 TCP 플래그설정을통한스캔 - URG, ACK, PSH, RST, SYN, FIN 조합 - SYN/FIN스캔 / PSH스캔 < 예 - 백트렉 >
ACK 스캔 ACK 스캔 - ACK 플래그만을설정한패킷을전송하여스캔 - 방화벽에서어떤포트가차단되고있는지알아보는데사용 - 방화벽이 SYN패킷을차단하는필터인지점검 - 포트가 Open인지 closed인지구별못함 - 옵션 : -sa
윈도우스캔 (Window Scan) 윈도우스캔 (Window Scan) - ACK 플래그를설정한패킷을송신하여스캔 (ACK스캔과같다 ) - 포트가 Open인지 closed인지구별 - 옵션 : -sw - 사용법 : #nmap -sw 192.168.41.129 ACK 스캔과같이 RST 응답을받은경우 - 방화벽에서차단되지않다는의미 - 그러나, 포트가 open 인지 closed 인지알수없음 RST 응답에서 TCP 윈도우필드를검토 - 0 이상의값 : 포트 open 상태 - 0 값 : 포트 closed 상태
아이들스캔 (idle scan) 아이들스캔 (idle Scan) - 1998년보안연구자 Antirez - 공격자자신을숨긴채, 좀비시스템을활용하여스캔 - SYN 에대하여, => open : SYN/ACK => closed : RST 응답 - SYN/ACK 패킷을수신한경우 => RST로응답 - RST를받은경우 => 무시 - IP프로토콜의 ID 1 SYN/ACK 6 SYN/ACK 공격자 좀비시스템 2 RST (IP ID : 100 노출 ) 7 RST (IP ID : 102 노출 ) 4 SYN/ACK 5 RST (IP ID : 101) 3 SYN ( 좀비인것처럼 ) 타깃시스템 < 포트 OPEN >
아이들스캔 (idle scan) 아이들스캔 (idle Scan) < 포트 Closed > < 포트 filtered >
아이들스캔 (idle scan) 아이들스캔 (idle Scan) - 좀비시스템찾기 - idle스캔 - 옵션 : si < 좀비호스트 >
nmap -sv 옵션 서비스버전스캔
nmap -O 옵션 운영체제 (OS) 스캔
NSE NSE (Nmap Scripting Engine) - Lua 기반의스크립트언어를이용 - 서비스정보수집, 도메인 lookup, whois검색, 다른네트워크대역의백도어설치여부, 취약점검토등 - nmap V4.2부터적용 - http://nmap.org/nsedoc/ NSE 스크립트구조 - Nmap API + Lua 확장기능 - NSE 라이브러리 : xxxx.lua - NSE 스크립트 : xxxx.nse
NSE NSE 스크립트 (Nmap Scripting Engine scripts) - http://nmap.org/nsedoc/
NSE NSE 스크립트구조설명
NSE 카테고리 NSE - http://nmap.org/nsedoc/ 서비스에 -sc 옵션 (#nmap -sc 192.168.41.129) 영향줄 가능성 존재
NSE 라이브러리 NSE
NSE 루아 (Lua) - NSE를제작에사용 ( 인터프리터스크립트언어 ) - 보안분야 : WhireShark, Snort 등 - 게임분야 : World of Warcraft, 앵그리버드, 원숭이섬으로부터의탈출등 - http://www.lua.org - 다운로드 (win버전) : https://code.google.com/p/luaforwindows/
Nse 실행 NSE 카테고리 : default -sc < 타겟 IP> = --script=default
NSE FTP의익명계정확인 - ftp-anon.nse - 익명 (anonymous) 계정사용여부체크 - 익명계정에권한부여문제 => 읽기권한뿐만아니라쓰기권한이있다면, 파일삭제및변조가능등
젠맵 (Zenmap) - 장점 zenmap 스캔결과를통해 네트워크토폴로지맵 을그릴수있음 두개의스캔결과를비교할수있다 스캔결과추적관리가능 동일한설정의스캔을반복수행가능 ( 프로파일이용 ) 실행되는명령어를보여줌 ( 모의침투테스터는명령어를검증할수있다 ) - 경로 : /usr/bin/zenmap
zenmap 프로파일 (Profile) - 10개의프로파일사용 - 각프로파일에사용된옵션정보 => Command: 새로운프로파일생성 - Profile New Profile or Command 프로파일수정 - profile Edit Selected Profile
스캔 zenmap Regular scan 프로파일을이용한스캔
zenmap 네트워크토폴로지맵 스캔결과를이용하여 네트워크토폴로지맵정보출력 - Topology 탭
zenmap 스캔결과저장 - 스캔결과를저장 - 기본저장포맷 : xml
zenmap 스캔결과비교 - 스캔결과를비교 - Tools메뉴 Compare Results 문자 : 2 차스캔결과에서제거된것 + 문자 : 2 차스캔결과에서추가된것
스캔검증 2 개이상의스캔을수행했을경우, 결과를조합하여판별 - FIN 스캔결과 : open filtered => 열려있는지, 필터링당한건지모름 ( 예 - 10 개가 open filtered) - ACK 스캔결과 : 2 개가 filtered => 2 개가 filtered 인경우 (10 개중 2 개가 filtered) 최종결과 : 10개중 2개 : filtered 10개중 8개 : open 상태 나머지 : closed 상태 여러개의스캔유형을시도하여, 검증필요
목차 Ⅴ. 취약점스캐닝 (Vulnerability Scanning) 1. 네서스 (Nessus)
1. 취약점스캔 (Nessus) Nessus Nessus - 다운로드 : http://www.tenable.com/products/nessus/select-your-operating-system
1. 취약점스캔 (Nessus) Nessus 데몬시작 Nessus Nessus 클라이언트실행 - 웹브라우저실행 : https://127.0.0.1:8834 에러발생시, 웹페이지예외처리
1. 취약점스캔 (Nessus) Nessus Nessus 클라이언트실행 - 보안예외처리
1. 취약점스캔 (Nessus) Nessus Nessus 사용자생성및설정 - ID : root / PW : toor Nessus 초기화및설치
1. 취약점스캔 (Nessus) Nessus 로그인 Nessus - 생성한 ID 와 PW 입력 (root / toor)
1. 취약점스캔 (Nessus) Nessus 정책설정 Nessus
1. 취약점스캔 (Nessus) Nessus 정책설정 Nessus - 스캔목적에따라정책선택
1. 취약점스캔 (Nessus) Nessus 정책설정 Nessus - 스캔목적에따라정책선택 (Advanced Scan 선택 )
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
1. 취약점스캔 (Nessus) Nessus 스캔 Nessus
목차 Ⅵ. 공격 (MetaSploit Framework) 1. 공격 (MetaSploit Framework)
1. Exploit Metasploit Framework MetaSploit Framework (http://www.metasploit.com) - 최초의오픈소스공격도구 - 공격코드, 페이로드, 인코더, 정찰도구, 보안테스팅등을제공 - 무료로공격코드접근, 공동연구, 개발및공유가능 - 2.7버전부터 Ruby를이용해새롭게만들어짐 ( 초기 C언어, 파이썬, 어셈블러등으로작성 ) - 2009년취약성관리솔루션업체 Rapid7에서인수 위치 - Kali Linux : /usr/share/metasploit-framework/msf3 Exploitation Tools - Metasploit - Metasploit Framework
1. Exploit Metasploit Framework Exploit ( 공격코드 ) - 시스템의권한을얻는과정 - 보안통제나설정을우회하는방법 - 대상시스템을장학한후에, 공격자의명령어를실행하고, 공격자가원하는것을대신할수있게만드는것 - 취약점을통한공격이실제로이루어질수있음을증명 - 사전에제작된코드 - 원격시스템으로전송 - 취약점을이용하여, payloads를실행할수있도록함 페이로드 (Payload) - 기능 : 새로운계정생성, 백도어설치, 공격대상시스템에 S/W 설치등 - 공격대상시스템에설치하는 S/W 나기능
1. Exploit Metasploit Framework Msfconsole 실행 (2 가지방법 )
1. Exploit Metasploit Framework msfconsole 에서모듈실행 msfconsole 명령어
1. Exploit Metasploit Framework msfconsole 명령어
1. Exploit Metasploit Framework Nessus 실행 - https://127.0.0.1:8834 - 로그인 : root/toor
1. Exploit Nessus 실행 - 정책설정 Metasploit Framework
1. Exploit Nessus 실행 - 스캔설정 Metasploit Framework
1. Exploit Nessus 실행 - 취약점스캔 Metasploit Framework
1. Exploit Exploit 시작 Metasploit Framework - #msfconsole
1. Exploit Metasploit Framework 공격코드 (exploit) 검색 - msf>search < 패치번호 > 등급이더높은공격코드선택 ( ms08-067 / ms09-001 ) 공격코드발견 공격코드발견
1. Exploit Metasploit Framework 공격코드 (exploit) 검색 - msf> use < 공격코드 > exploit/windows/smb/ms08_067_netapi auxiliary/dos/windows/smb/ms09_001_write Payload 검색 - 공격코드에서사용할수있는 payload 목록출력 msf> show payloads
1. Exploit Metasploit Framework 페이로드 (payloads) 선택 - MSF>set payload < 페이로드이름 > 페이로드의선택사항 (option) 검색 - 선택한 payload 에대한여러옵션사항을검색 - MSF> show options 옵션중, default 값이없는것 - RHOST : remote 호스트 IP ( 타겟시스템 ) - LHOST : 공격자호스트 IP
1. Exploit Metasploit Framework 페이로드 (payloads) 옵션설정 - MSF>set < 옵션이름 > - RHOST : remote호스트 IP ( 타겟시스템 ) - LHOST : 공격자호스트 IP
1. Exploit Exploit 실행 Metasploit Framework - MSF>exploit 실패