1. Scanning

정의
대상 시스템/네트워크/애플리케이션을 분석하여 정보 수집 및 취약점을 탐지하는 행위로 패킷을 보내고 응답을 분석하여 정상 동작 여부, 서비스 버전, 취약점 존재 여부 등을 확인하여 보안 점검, 침투 테스트, 자산 관리 등과 같은 분야에 활용

1.1 Banner Grabbing

서비스 접속 시 반환되는 배너 문자열(서버 버전, OS 정보 등)을 수집하는 것.

수집방식

  • Passive: 네트워크 트래픽에서 배너 수집
  • Active: 직접 접속 후 응답 메시지 확인 (예: , , )
  • 위험성: 공격자가 서비스 버전을 확인 후 취약점 공격 가능
  • 분석방법: 포트별 패킷 분석, natcat 을 이용한 프로토콜 해더 분석

TTL(Time-to-Live) 값과 TCP Window Size는 OS FingerPrinting(OS Fingerprinting)에서 특정 시스템을 식별하는 데 사용되는 주요 단서.
이러한 값들은 운영 체제마다 고유한 기본 설정값을 가지기 때문에, 네트워크 패킷을 분석하여 대상 시스템을 추정이 가능하다.

1.2 IP Scan

네트워크 상에서 활성화된 호스트(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

1.3 Port Scan

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처럼 세션 정보를 확인하는 도구로는 탐지할 수 없다. 스캔 시도를 확인하고 분석하려면 tcpdumpWireshark와 같은 패킷 분석 도구를 사용해야 한다.

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 응답을 받게된다.


2. 취약점 탐지

2.1 MITRE ATT&CK

  • Cyber Kill Chain (CKC) 이해 및 한계
    Cyber Kill Chain은 사이버 공격 분석을 위해 공격자가 표적을 공격할 때 거쳐야 하는 일련의 단계를 나누어 각 단계에서 공격을 탐지 및 차단하는 방어 전략이다.
    CKC는 공격자의 행위를 시간의 흐름에 따라 묘사하는 데 그치며, 각 단계에서 어떤 기술이 사용되었는지, 관련 공격 도구나 해킹 그룹과의 연결고리에 대한 정보가 부족하다는 한계가 있고, 외부 침입자 방어 위주의 전략이라 이미 침투한 공격자나 내부자에 의한 공격에 대한 전략은 미흡하다.
  • MITRE ATT&CK
    실제 사이버 공격 사례를 관찰하여 공격자가 사용한 악의적 행위를 전술(Tactics)기술(Techniques)의 관점으로 분석하고 분류한 표준적인 지식 기반 저장소이다.
    ATT&CK Framework는 다음 구성 요소들로 이루어져 있다.
    • Tactics
      공격자의 공격 목표에 따른 행동
    • Techniques
      공격자가 Tactic을 달성하기 위한 구체적인 방법
    • Mitigations
      방어자가 공격을 예방하고 탐지하기 위해 취할 수 있는 대응 행동
    • Groups
      해킹 단체에 대한 정보와 이들이 사용하는 공격 기법
    • Software
      공격에 사용된 공격 코드, OS 기본 도구, 공개 도구

2.2 Network Packet Analysis

Network 환경에서 발생하는 패킷들을 탐지하고 분석할 수 있는 대표적인 도구는 다음과 같다.

  • tcpdump
    CLI 기반의 패킷 분석 도구로, Unix/Linux 시스템에 기본으로 설치되어 있다. 네트워크 인터페이스를 통과하는 패킷을 실시간으로 캡처하고 출력한다. 캡처된 내용을 파일(.pcap 형식)로 저장할 수 있으며, 이 파일은 Wireshark와 같은 GUI 도구로 가져와 분석 가능하다.
  • wireshark (tshark)
    GUI, CLI 모두 지원하는 네트워크 패킷 분석 도구로, filter 설정을 통해 원하는 패킷만 걸러 분석이 가능하다.
  • nmap
    주로 포트 스캐닝에 사용되는 도구로 네트워크상의 호스트와 서비스(포트)를 검색하고, 운영체제 정보를 식별하는 등 네트워크 탐색 및 보안 분석에 활용한다. 이 도구는 네트워크 탐지 및 매핑에 중점을 두고 있다.

2.2.1 tshark 이용하여 패킷 분석

packet 분석을 위해 캡쳐한 패킷의 정보를 파싱 해야하는데, gui 환경에선 쉽지 않기 때문에 cli 버전인 tshark를 이용했고, 주요 실습은 다음과 같이 진행했다.

  • Attacker, Victim1, Victim2 VM 띄우기
  • Attacker에서 Victim에 nmap 명령으로 포트 스캐닝
  • Attacker에서 Victim에 ZAP으로 스캐닝 공격
  • 결과를 pcap파일로 저장하여 tshark로 데이터 파싱

Attacker는 kali, Victim은 Rocky, Ubuntu 환경으로 설정했다. 실습에 사용한 pcap 파일은 보안상 비공개합니다.

2.2.2 Covert Channel 실습

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

2.2.3 Command Injection

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 공격도 시도했음을 알 수 있었다.

2.2.4 SQL Injection

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에 복잡하게 인코딩 되어 있지만 주요 내용을 뽑아보면 다음과 같다.

  • idx=1%27 AND >> idx=1' AND
    쿼리 시작 부분으로 입력 값 뒤에 작은따옴표(')를 넣어 SQL 쿼리를 닫고 AND를 사용하여 공격 코드를 삽입한다.
  • UNICODE(SUBSTRING(...),3,1)) >> UNICODE(SUBSTRING(...,3,1))
    추출하려는 문자열의 세 번째(3) 문자 하나를 잘라내어(SUBSTRING) 해당 문자의 유니코드 값을 얻는다.
  • )>111 AND 'vVLs'='vVLs >> )>111 AND 'vVLs'='vVLs
    조건 확인 부분으로 추출된 유니코드 값이 111보다 큰지 확인한다. 참/거짓 결과(TRUE/FALSE)를 웹 페이지의 응답 변화를 통해 확인한다.
  • SELECT TOP 1 ISNULL...
    DB 객체 정보를 가져오는 쿼리문이다.
  • lecture..sysusers.name, lecture..sysobjects.name
    사용자 이름과 테이블 이름을 합친 문자열 생성
  • SELECT TOP N, ORDER BY
    DB내 모든 사용자 및 테이블 이름을 하나씩 뽑아낸다.

공격자는 이 URI를 수백, 수천 번 요청하여, 응답의 변화(참/거짓)를 통해 데이터베이스 내부 구조(테이블명, 컬럼명, 사용자명) 를 한 글자씩 훔쳐내고 있는 중이었음을 알 수 있다.


etc. SBOM 취약점 관리 (feat. Trivy)

SBOM (Software Bill Of Materials)

소프트웨어의 구성 요소 목록을 나타내는 말로 SW를 구성하는 모든 컴포넌트, 라이브러리, 모듈 등의 정보와 그 출처, 버전, 라이선스 등을 포함하는 명세서이다.

주요 특징을 정리하면 다음과 같다:

  • 소프트웨어 구성 요소 목록
    소프트웨어를 구성하는 모든 요소를 목록 형태로 제공
  • 보안 및 위험 관리
    새롭게 발견된 취약점이 적용된 소프트웨어를 신속하게 파악하여 대응하고, 잠재적인 위험을 미리 관리
  • 가시성 확보
    소프트웨어 공급망의 투명성을 높여 구성 요소의 신뢰성을 확보
  • 자동화 연동
    CI/CD와 같은 개발 자동화 과정에 연결하여 최신 상태를 유지

SBOM이 중요한 이유는 취약점 발생 시 구성 요소에 대한 정리가 이미 되어 있기 때문에 영향을 받은 부분을 빠르게 찾아내고 대응할 수 있고, 소프트웨어 구성시 사용된 기술의 품질에 대한 가시성을 높여 개발 안정성을 향상 시킬 수 있다.

Trivy

출처: https://trivy.dev/

trivy컨테이너 이미지, git, File System, IaC (Infrastructure as Code) 등에서 취약점을 식별하고 관리하는 도구이다.

trivy 주요 기능

  • 간편한 사용
    설치와 사용이 매우 간단하며, 명령 기반으로 빠르게 실행.
  • 빠른 스캔 속도
    신속하게 결과를 제공하여 CI/CD 파이프라인에 통합하기 용이
  • 범용성
    OS 패키지뿐만 아니라 애플리케이션 패키지 종속성까지 스캔하여 깊이 있는 분석을 제공

감지 범위

  • CVE
    OS 패키지 및 애플리케이션의 소프트웨어 종속성에 대한 CVE
  • IaC 구성 문제
    IaC 코드 내의 Misconfigurations
  • SBOM
    사용 중인 OS 패키지 및 소프트웨어 종속성 정보
  • 민감한 정보 및 비밀
    코드나 구성 파일 내에 노출된 비밀 정보

Nginx 스캔

  1. Nginx Image Scan
    trivy image nginx:latest
    위 명령을 수행하면 이미지 스캔 결과를 얻을 수 있는데 먼저 스캔 결과 요약 정보를 확인할 수 있다. 98은 취약점 갯수이다.
    스캔 결과 리포트를 구성하는 각 항목이다.
    많은 정보가 있지만 일부만 보도록 하자. 스캔한 이미지를 구성하는 모듈, 취약점 CVE를 확인 가능하고 위험 정도를 LOW, MEDIUM, HIGH로 나누고 있고 설치된 버전 정보와 취약점이 발생한 부분을 패치한 최신 버전을 확인 가능한데 나는 최신 버전 이미지를 스캔했기 때문에 아무것도 뜨지 않았다.
    마지막으로 취약점이 어느 부분에서 발생했는지 요약된 정보도 항목별로 확인 가능하다.

    2. Nginx K8s 매니페스트 스캔 (IaC)
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파일을 코드 라인별로 취약한 부분을 확인할 수 있어 좋은거 같다.

이번엔 일부러 취약하게 작성한 배포 파일을 스캔을 해봤고 구성 항목은 동일하니 결과만 보도록 하자.


0개의 댓글