
정의
대상 시스템/네트워크/애플리케이션을 분석하여 정보 수집 및 취약점을 탐지하는 행위로 패킷을 보내고 응답을 분석하여 정상 동작 여부, 서비스 버전, 취약점 존재 여부 등을 확인하여 보안 점검, 침투 테스트, 자산 관리 등과 같은 분야에 활용
서비스 접속 시 반환되는 배너 문자열(서버 버전, OS 정보 등)을 수집하는 것.
수집방식
- Passive: 네트워크 트래픽에서 배너 수집
- Active: 직접 접속 후 응답 메시지 확인 (예: , , )
- 위험성: 공격자가 서비스 버전을 확인 후 취약점 공격 가능
- 분석방법: 포트별 패킷 분석, natcat 을 이용한 프로토콜 해더 분석
TTL(Time-to-Live) 값과 TCP Window Size는 OS FingerPrinting(OS Fingerprinting)에서 특정 시스템을 식별하는 데 사용되는 주요 단서.
이러한 값들은 운영 체제마다 고유한 기본 설정값을 가지기 때문에, 네트워크 패킷을 분석하여 대상 시스템을 추정이 가능하다.
네트워크 상에서 활성화된 호스트(IP) 를 탐지하는 과정.
원리
- 특정 IP 대역에 패킷(ICMP, TCP, UDP 등)을 전송
- 응답 여부를 통해 해당 IP가 살아 있는지 확인
- 프로토콜을 만들어서 Challenge-Respone 구조 활용
주요 기법
- Ping Scan: ICMP Echo 요청으로 활성 호스트 탐지
- ARP Scan: 같은 네트워크 대역에서 MAC 주소 기반 탐지
- TCP/UDP Scan: 특정 포트 응답 여부로 호스트 존재 확인
활용
- 네트워크 자산 관리
- 비인가 장비 탐지
- 침투 테스트 사전 조사
- 도구 예시: nmap -sn , arp-scan , Advanced IP Scanner
Port는 전송 계층에서 동작하고 전송 프로토콜(TCP/UDP)을 통해 Challenge-Response (응답이 오냐 안오냐) 형태로 동작하는데 TCP/UDP 정보 이용하여 특정 시스템의 열린 포트(Open Port) 를 탐지하는 것이다.
주요 기법
- TCP Connect Scan: 3-way handshake 완료
- SYN Scan (Half-open): 탐지 회피용
- FIN / NULL / XMAS Scan: 비정상 플래그 활용
- 도구: nmap, hpging3, masscan
포트 스캐닝 자체는 막을 수 없다고 보지만, Nmap이 보내는 패킷에는 고유한 Nmap 헤더 시그니처가 포함되어 있어, 이를 식별하여 해당 IP를 차단하는 것이 가능하다.
포트 스캔의 기본 원리는 TCP 플래그(URG, ACK, PSH, RST, SYN, FIN)를 이용한 다양한 조합으로 이루어진다. 특히 스캔 시에는 SYN 패킷을 보내고 서버로부터 SYN, ACK 응답을 받지만, 세션 연결을 의도적으로 맺지 않는다. 이는 시스템에 노출되는 것을 최소화하기 위함이다.
따라서, 연결이 수립되지 않은 이러한 스캔 시도는 netstat처럼 세션 정보를 확인하는 도구로는 탐지할 수 없다. 스캔 시도를 확인하고 분석하려면 tcpdump나 Wireshark와 같은 패킷 분석 도구를 사용해야 한다.
Xmas Scan
Xmas 스캔은 스텔스 스캔의 한 형태로, TCP 헤더의 FIN, PSH, URG 세 가지 플래그를 모두 1로 설정하여 패킷을 보낸다. 이는 패킷의 플래그 필드가 마치 크리스마스트리의 전구처럼 모두 켜진 것 같다고 하여 붙여진 이름이다.
이 스캔은 RFC 793 (TCP 프로토콜 명세)의 동작 원리에 의존하며, 특히 포트 상태에 따른 응답 패킷을 분석하여 포트의 개방 여부를 판단한다.
![]()
출처: https://velog.io/@younghyun/%EC%8A%A4%ED%85%94%EC%8A%A4-%EC%8A%A4%EC%BA%94X-MAS-NULL-FIN-Scan%EC%9D%B4%EB%9E%80
Port가 열려 있을 경우 Target으로부터 응답이 없다.
출처: https://velog.io/@younghyun/%EC%8A%A4%ED%85%94%EC%8A%A4-%EC%8A%A4%EC%BA%94X-MAS-NULL-FIN-Scan%EC%9D%B4%EB%9E%80
Port가 닫혀 있을 경우 Target으로부터 RST 응답을 받게된다.
Network 환경에서 발생하는 패킷들을 탐지하고 분석할 수 있는 대표적인 도구는 다음과 같다.
packet 분석을 위해 캡쳐한 패킷의 정보를 파싱 해야하는데, gui 환경에선 쉽지 않기 때문에 cli 버전인 tshark를 이용했고, 주요 실습은 다음과 같이 진행했다.
Attacker는 kali, Victim은 Rocky, Ubuntu 환경으로 설정했다. 실습에 사용한 pcap 파일은 보안상 비공개합니다.
TCP Flag는 SYN FIN ACK PSH URG로 구성되어 있는데, 이중 일반적으로 데이터가 담기는 Flag는 PSH가 유일하다. 즉, 다른 Flag에 데이터가 담겨져 오면 공격으로 간주할 수 있고, 이를 Covert Channel을 이용한 공격이라고 한다.
tshark -r {filename} -T fileds -e "tcp.urgent_pointer" | egrep -vi "^0$" | tr '\n' ','
위 명령을 입력하면 URG flag가 활성화 되어 있을 때 urg pointer에 담겨 있는 값을 콤마 단위로 뽑아낼 수 있다. 여기서 값이 안나오면 정상적이지만 실행 결과를 보면 Encoding 되어 있는 어떤 값들이 담겨 있다고 볼 수 있다.

python chr 함수를 이용해서 문자열로 변환 해보니 첨부한 사진 하단에 보이는거처럼 예상한대로 값이 담겨 있음을 확인할 수 있었다.

tshark -r {filename} -Y "http.request.uri matches \"fr.jpg\"" -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.uri"
위 명령으로 fr.jpg 파일이 통신된 시간, 출발지 ip, host, uri 정보를 파싱한다. 217.195.49.146 host가 공격 시도를 한 것이 의심되어 접근 횟수에 관련한 정보를 추가로 파싱 해봤다.
tshark -r {filename} -Y "ip.addr == 217.195.49.146" -T fields -e "frame.time" -e "ip.src" -e "http.request.method" -e "http.request.uri" | wc -l
3120회 접근한 것을 확인했다. command injection 공격이니 url에 cmd=이라는 키워드가 들어 갔을거다라는 판단이 들었고, POST method에 해당되니 다음과 같이 명령을 입력했다.
tshark -r {filename} -Y "ip.addr == 217.195.49.146" -T fields -e "frame.time" -e "ip.src" -e "http.request.method == POST" -e "http.request.uri" | grep cmd




결과를 보면 예상한대로 cmd와 함께 ls pwd cat과 같은 명령이 담겨 있고, wget, nc명령도 담겨 있는것으로 보아 파일 업로드 & 다운로드 공격도 시도했다고 볼 수 있고, nc -e /bin/sh명령이 있는 것으로 보아 Reverse Shell 공격도 시도했음을 알 수 있었다.


SQL Injection 공격이 의심되는 네트워크 환경을 분석하기 위해 먼저 통신한 ip 리스트를 모아봤다.
tshark -r sqlmap.pcap -Tfields -e "ip.src" | sort | uniq -c | sort -nr
tshark -r sqlmap.pcap -Tfields -e "ip.dst" | sort | uniq -c | sort -nr
pcap 파일에서 출발지, 도착지 ip 주소들이 얼마만큼 통신을 했는지 정보를 확인할 수 있다.
src ip 중 가장 많은 192.168.0.206의 ip 주소에서 GET Method로 요청을 한 패킷 정보를 확인 해봤다.

1 19.336948 192.168.0.208 50887 192.168.0.206 80 HTTP 1295 GET /chapter4/view.asp?page=1&idx=1%27%20AND%20UNICODE%28SUBSTRING%28%28SELECT%20TOP%201%20ISNULL%28CAST%28lecture..sysusers.name
tshark -r sqlmap.pcap -Y "ip.src_host == 192.168.0.208 && http.request.method == GET" | sort -r | uniq -c | sort -nr
위 명령을 실행한 결과 http request uri ISNULL, SELECT와 같은 쿼리문이 삽입되어 있음을 알 수 있었고, SQL Injection 공격이 이루어졌음을 짐작할 수 있다.
SQL Injection 공격 중 Blind SQL Injection 공격이 이루어져 있음을 알 수 있다. http request uri에 복잡하게 인코딩 되어 있지만 주요 내용을 뽑아보면 다음과 같다.
')를 넣어 SQL 쿼리를 닫고 AND를 사용하여 공격 코드를 삽입한다.SUBSTRING) 해당 문자의 유니코드 값을 얻는다.TRUE/FALSE)를 웹 페이지의 응답 변화를 통해 확인한다.SELECT TOP 1 ISNULL...lecture..sysusers.name, lecture..sysobjects.nameSELECT TOP N, ORDER BY공격자는 이 URI를 수백, 수천 번 요청하여, 응답의 변화(참/거짓)를 통해 데이터베이스 내부 구조(테이블명, 컬럼명, 사용자명) 를 한 글자씩 훔쳐내고 있는 중이었음을 알 수 있다.
소프트웨어의 구성 요소 목록을 나타내는 말로 SW를 구성하는 모든 컴포넌트, 라이브러리, 모듈 등의 정보와 그 출처, 버전, 라이선스 등을 포함하는 명세서이다.
주요 특징을 정리하면 다음과 같다:
SBOM이 중요한 이유는 취약점 발생 시 구성 요소에 대한 정리가 이미 되어 있기 때문에 영향을 받은 부분을 빠르게 찾아내고 대응할 수 있고, 소프트웨어 구성시 사용된 기술의 품질에 대한 가시성을 높여 개발 안정성을 향상 시킬 수 있다.

trivy란 컨테이너 이미지, git, File System, IaC (Infrastructure as Code) 등에서 취약점을 식별하고 관리하는 도구이다.
trivy 주요 기능
- 간편한 사용
설치와 사용이 매우 간단하며, 명령 기반으로 빠르게 실행.- 빠른 스캔 속도
신속하게 결과를 제공하여 CI/CD 파이프라인에 통합하기 용이- 범용성
OS 패키지뿐만 아니라 애플리케이션 패키지 종속성까지 스캔하여 깊이 있는 분석을 제공
감지 범위
- CVE
OS 패키지 및 애플리케이션의 소프트웨어 종속성에 대한 CVE- IaC 구성 문제
IaC 코드 내의 Misconfigurations- SBOM
사용 중인 OS 패키지 및 소프트웨어 종속성 정보- 민감한 정보 및 비밀
코드나 구성 파일 내에 노출된 비밀 정보
trivy image nginx:latest
위 명령을 수행하면 이미지 스캔 결과를 얻을 수 있는데 먼저 스캔 결과 요약 정보를 확인할 수 있다. 98은 취약점 갯수이다.
스캔 결과 리포트를 구성하는 각 항목이다.
많은 정보가 있지만 일부만 보도록 하자. 스캔한 이미지를 구성하는 모듈, 취약점 CVE를 확인 가능하고 위험 정도를 LOW, MEDIUM, HIGH로 나누고 있고 설치된 버전 정보와 취약점이 발생한 부분을 패치한 최신 버전을 확인 가능한데 나는 최신 버전 이미지를 스캔했기 때문에 아무것도 뜨지 않았다.apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
# 취약점이 비교적 적은 최신 stable 버전의 alpine 이미지를 사용합니다.
image: nginx:1.27.0-alpine
ports:
- containerPort: 80
resources:
limits:
cpu: "500m"
memory: "128Mi"
requests:
cpu: "250m"
memory: "64Mi"
Nginx Deployment나 Pod를 정의하는 YAML 파일 Misconfigurations을 스캔한다. 일반적인 파일과 취약한 파일을 둘 다 만들어 각각 스캔해서 결과를 보겠다.

마찬가지로 스캔 결과 요약을 확인할 수 있다. 잘못된 설정이 14가지 있는 것으로 나왔다. LOW, MEDIUM, HIGH, CRITICAL 네 가지 정도로 위험도를 분류하고 trivy에서 규정한 취약점 식별자를 함께 확인이 가능하다. yaml파일을 코드 라인별로 취약한 부분을 확인할 수 있어 좋은거 같다.
이번엔 일부러 취약하게 작성한 배포 파일을 스캔을 해봤고 구성 항목은 동일하니 결과만 보도록 하자.
