모의해킹 수행하기
모의해킹 시나리오 작성
Footprinting
- 발자국을 살펴보는 행위 -> 해킹을 위한 사전 준비 작업
- 간접적으로 외부에 노출되어 있는 정보를 획득하는 기법
> 대상 시스템의 직접적인 반응 없이 정보를 획득하는 기법 -> 직접 데이터를 주고 받지 않음
> 대상에 정보 수집의 흔적을 남기지 않음
- 대상의 전반적인 윤곽을 형성하기 위한 기초 작업
> 전체 모의해킹 과정의 70~80%의 시간을 할애함
- 대상이 소유하지 않은 시스템을 공격 대상으로 선정할 수 있으므로 공격의 범위를 잘 고려해야 함
획득할 정보 범위
- 정보의 질을 따지지 않고 최대한 많은 양의 정보를 수집함
> 대상의 직접적인 반응으로 확인된 정보가 아니므로 차후 필터링 할 필요가 있음
- 도메인 정보, 호스트 이름, IP 주소, 사용된 기술과 환경설정, 사용자 이름, 문서, 프로그램 소스코드, 계정 정보, 연락처 등
Google 기본 검색
- 대/소문자를 구별하지 않음
- 와일드 카드(.*)를 지원함
- 자동 단어 확장 기능
- 검색어는 최대 10단어로 제한됨
- 구문 검색, 공백, 일반적인 단어, 순서를 포함한 검색을 사용할 수 있음
- 논리연산자 지원됨
> 기본적으로 OR로 검색됨
- 검색어는 왼쪽에서 오른쪽으로 순차적인 분석을 수행함
Google 고급 검색
- 단어나 문장을 활용한 검색기능 외에 검색 연산자를 이용하는 검색
- 다중 옵션 가능
- 검색 연산자는 무조건 소문자로 작성해야 함
- 검색 연산자와 검색어 사이에 공백이 있으면 안됨
검색 연산자
검색어 | 사용법 | 의미 |
intitle: | intitle:검색어1 [검색어2] | 제목에 검색어가 1개라도 포함되어 있으면 출력 |
allintitle: | allintitle:검색어1 [검색어2] | 제목에 검색어가 모두 포함되어 있는 페이지 출력 |
intext: | intext:검색어 | 본문에 검색어가 포함되어 있는 페이지 출력 |
site: | site:URL | 특정 도메인에 해당되는 페이지 출력 |
inurl: | inurl:검색어 | URL에 검색어가 포함되어 있는 페이지 출력 |
link: | link:URL | Link에 URL이 지정된 페이지 출력 |
numrange: | numrange:숫자-숫자(범위) | 지정된 숫자 범위내의 결과값 검색 |
cache: | cache:URL | 저장된 페이지에서 URL에 해당하는 페이지 출력 |
filetype: | filetype:확장자 | 확장자로 지정된 종류의 파일 검색 |
검색 옵션 | 의미 |
+ | 비슷한 문자를 포함하여 검색 |
- | 검색 결과에서 제외 |
" " | 완전한 문구가 포함된 결과 검색 |
. | 한 단어를 포함한 검색 |
* | 모든 단어 검색 |
|, OR | 또는 |
Google 고급 검색 예제
- inurl:admin site:co.kr filetype:pdf
시나리오에 따른 정보 수집
탐색(Scan, Scanning)
- Footprint 단계에서 수집한 정보의 사실 유무 확인 및 누락된 정보 확인
- 대상 시스템에 직접적으로 데이터를 전송하여 확인함
> 대상 시스템에 Log를 남길 확률이 높음 -> 공격자, 모의해커의 흔적 노출
- 침투 대상의 네트워크에서 실제 동작 중인 세스템, 서비스, 프로그램, OS 확인
- 확인된 시스템 및 프로그램의 취약점 정보 수집
종류
- Active Host Scanning -> 실제 동작중인 시스템 식별
- Port Scanning -> 동작중인 시스템에서 제공하는 서비스 식별
- Target Scanning -> 특정 취약점을 제공하는 시스템 식별
- Vulnerability Scanning -> 동작중인 시스템에서 발생할 수 있는 알려진 취약점 식별
Active Host Scanning
- 목적
> 침투 대상이 될 수 있는 시스템을 식별 -> 실제 동작중인 시스템 확인
- 추가로 시스템의 기본적인 정보를 확인함
> 데이터 전송 시간, OS 종류, IP 주소, MAC 주소 ...
- 주의 : 방화벽에 의해 정확한 정보를 획득하지 못할 수도 있음
Active Host Scanning
- ICMP echo ping : ICMP 메시지를 이용하여 동작중인 호스트를 식별하는 방식
- ARPing : ARP 패킷을 이용하여 동작중인 호스트를 식별하는 방식
- TCP ping : TCP 패킷을 이용하여 동작중인 호스트를 식별하는 방식
- UDP ping : UDP 패킷을 이용하여 동작중인 호스트를 식별하는 방식
Port Scanning
- 목적
> 침투 대상이 될 수 있는 서비스를 식별 -> 공격 데이터를 전송할 수 있는 프로그램 식별
- 주의 -> 방화벽에 의해 정확한 정보를 획득하지 못할 수도 있음
Port Scanning 종류
- UDP Port Scanning
> ICMP 메시지를 이용하여 동작중인 호스트를 식별하는 방식
- TCP Port Scanning
> Connect Scan, Half Open Scanning, X-Mas Scan, Fin Scan, Null Scan, IDLS Scan ...
NMAP
- 원격 컴퓨터들의 자세한 정보를 알아낼 수 있음
- 사용법
> #nmap [Scan Type(s)] [Options] 목적지
> 목적지 : hostnames, IP addresses, networks 등...
NMAP 옵션
Scan Type | General Option | ||
-sT | TCP Connect Scanning | -P0 | Scan 하기 전에 Ping을 보내지 않음 |
-sS | TCP SYN Scanning | -O | OS Detection |
-sF | TCP FIN Scanning | -v | 스캔 세부사항 표시 |
-sX | TCP X-Mas Scanning | -p | Port 지정 |
-sN | TCP Null Scanning | -f | Packet 분할 |
-sU | UDP Scanning | ||
-sO | Protocol Scanning |
UDP Port Scanning
- UDP Packet을 이용해 대상 시스템 Port Scan
- Close Port -> ICMP Destination Unreachable 응답
- Open Port -> 응답 없음
단점
- UDP 혹은 ICMP의 경우 필터링 장치에 의해서 차단될 가능성이 높음
- 응답이 없는 경우를 Open으로 인식하므로, 방화벽에 의해 패킷이 차단되는 경우 Open / Closed의 여부가 불분명함
장점
- 정상적인 통신이 아니기 때문에 Log가 남지 않음
TCP Port Scanning
- TCP Packet을 이용해 대상 시스템 Port Scan
- TCP의 Flag를 이용해 다양한 방법으로 Scan을 수행함
TCP Connect Scanning (Full Connection Scan)
- 3 Way-Handshaking을 통해 대상 시스템의 포트 상태 확인
- Port가 열려있을 경우 세션 수립 / 닫혀있을 경우 RST Packet 수신
- 결과가 정확하고 일반 계정으로 Scanning 가능함
- Overhead가 크고 Log가 남아 발각되기 쉬움
- #nmap -sT 60.60.60.1
Half Open Scan
- 포트가 열려있을 경우 S/A Packet을 보내 연결을 끊는 방법
- 닫혀 있을 경우 RST Packet 수신
- 세션이 수립되지 않게 ACK 신호를 안보내기 때문에 비교적 Log를 적게 남김
- #nmap -sS 60.60.60.1
FIN Scanning
- RST Flag가 설정된 Packet을 확인함으로써 포트가 닫혔음을 판단함
- IDS를 회피할 수 있는 가능성이 높지만, 목표 시스템이 UNIX 플랫폼일 경우만 가능
- Open/Filter/오류의 결과가 불분명함
- #nmap -sF 60.60.60.1
X-mas Scanning
- FIN, PSH, URG, Flag를 동시에 설정하여 scan함
- IDS를 회피할 가능성이 높지만, 목표 시스템이 UNIX/Linux 플랫폼일 경우만 가능
- Open/Filter/오류의 결과가 불분명함
- #nmap -sX 60.60.60.1
NULL Scanning
- 모든 Flag를 설정하지 않고 Scan함
- IDS를 회피할 가능성이 높지만, 목표 시스템이 UNIX/Linux 플랫폼일 경우만 가능
- Open/Filter/오류의 결과가 불분명함
- #nmap -sN 60.60.60.1
IDLE Scanning
- IDLE Host의 반응을 통해 침투 대상의 활성화된 port 정보를 확인함
> IP Header의 Identification 필드를 지속적으로 모니터링 하여 변화를 관찰함
> IDLE Host -> Windows System(RST 전송), 다른 프로그램이 동작 중이면 정확한 결과 확인이 어려움
- 출발지 IP를 IDLE PC로 변조하고 확인하고 싶은 서비스의 연결요청(SYN)을 전달함
- Target Port가 Open일 경우
> 연결 요청(SYN)에 대한 응답(SYN/ACK)을 출발지로 지정된 IDLE PC로 전송함
> 비정상 TCP(SYN/ACK)를 요청 받은 IDLE Host에서 RST를 응답으로 전송함
ㄴ RST 전달을 위해 IP의 ID값을 +1 값으로 전달함
> 지속적으로 모니터링을 수행함
ㄴ 연속적으로 전달하는 응답에서 IP의 ID 값을 +1 값으로 전달함 -> 모니터링 ID가 2씩 증가함
- Target Port가 Close일 경우
> 연결 요청(SYN)에 대한 응답(RST)을 출발지로 지정된 IDLE PC로 전송함
> RST 요청 받은 IDLE Host에서 RST에 대한 응답을 발생시키지 않음
ㄴ Target의 요청에 의해 추가 패킷이 발생하지 않음
- 지속적으로 모니터링을 수행함
ㄴ 연속적으로 전달하는 응답에서 IP의 ID값을 +1 값으로 전달함 -> 모니터링 ID가 1씩 증가함
Hping3를 이용한 IDLE Scanning
- 사용법
> 기본 사용법 -> #hping3 <host> [options]
- Options
-r | ID 모니터링 | -p <dport> | 목적지 Port 주소 설정 |
-a <Spoofing ID> | 출발지 IP 주소 변조 | -S | TCP flag에서 SYN 세팅 |
- IDLE Host 상태 모니터링 : #hping3 -r 172.16.10.10
- Target 시스템 Port Scan 요청 전송 : #hping3 -a 172.16.10.10 172.16.10.20 -p 22 -s