카테고리 없음

모의해킹 2일차 - 방화벽

ajh 2026. 5. 28. 17:44

해킹 시나리오 작성

모의 해킹 표준안(PETS; Penetration Testing Execution Standard)

모의 해킹을 수행할 때 필요한 역할과 과정들에 대한 정의를 통해 모의 해킹 수행 단계와 순서 등을 정의하고 있다.

 

1. 사전 계약(Pre-engagement Interactions)
사전 계약 단계에서는 고객과 함께 향후 어떤 방식과 수준의 모의 해킹을 수행할 것인지
협상한다

 

2. 정보 수집(Intelligence Gathering)
정보 수집 단계에서는 정보 수집에 해당되는 작업을 실시한다.

 

3. 위협 모델링(Threat Modeling)
위협 모델링 단계는 정보 수집 단계에서 파악된 정보를 이용해 대상 시스템에 존재하는
취약점을 본격적으로 식별하는 단계이다.

 

4. 취약점 분석(Vulnerability Analysis)
취약점 분석 단계에서는 이전 단계에서 획득한 정보를 통합하고 이를 이용해 실행 가능한
공격 방법이 무엇인지를 구체적으로 분석한다.

 

5. 침투 수행(Exploitation)
침투 수행 단계에서는 모의 해킹 대상에 대해 분석한 실행 가능한 공격 방법을 수행한다. 

 

6. 포스트 익스플로잇(Post Exploitation)
포스트 익스플로잇 단계에서는 이미 여러 시스템에 침투한 상황에서 다양한 정보를 수집하고 그 중에서 실질적으로 사용 가능한 정보를 분석 및 확인한다.

 

7. 보고서 작성(Reporting)
보고서 작성 단계는 시도한 모의 해킹의 최종 결과물을 작성하는 단계이다

 

모의해킹 수행 시 접근하는 방법
  . 화이트박스 테스팅(White-box Testing)
    - 정보를 제공하고 모의해킹을 수행하는 방법
    - 장점: 이미 정보를 알고 있기 때문에 접근성이 쉽고 정보를 이미 알고 있으므로 공격에 들어가는 시간들을 줄일 수 있다.
    - 단점: 실제 공격자들이 공격하는 관점과 멀어질 수 있다.

  . 블랙박스 테스팅(Black-box Testing)
    - 모의해킹을 하는 정보를 알려주지 않고 모의해킹을 수행하는 방법
    - 담당자가 아는 경우와 모르는 경우도 있다.
    - 장점: 실제 공격자처럼 다양한 공격을 수행할 수 있다.
    - 단점: 모의해킹을 하는 관점에서 정보를 모르기 때문에 접근성이 어려워서 공격에 들어가는 시간이 많이 걸린다.

 

RFP 문서
  . Request For Proposal의 약자이며 제안요청서라고 한다.
  . 기관이나 회사가 사업, 프로젝트, 시스템 구축, 보안 컨설팅, 용역 수행 등을 맡길 업체를 선정하기 
    위해서 작성하는 문서이다.

 

RFP의 목적
  . RFP 문서는 발주자가 업체에게 다음 내용을 요청하기 위해 사용한다.
    - 사업 목적: 왜 이 사업을 하는지 설명
    - 요구사항: 어떤 기능, 서비스, 결과물이 필요한지 명시
    - 제안 범위: 업체가 어디까지 수행해야 하는지 정의

    - 금융그룹 홈페이지, KISA 홈페이지, 나라장터(공공기관)를 많이 참고한다.

 

RFP의 목적
  . RFP 문서는 발주자가 업체에게 다음 내용을 요청하기 위해 사용한다.
    - 사업 목적: 왜 이 사업을 하는지 설명
    - 요구사항: 어떤 기능, 서비스, 결과물이 필요한지 명시
    - 제안 범위: 업체가 어디까지 수행해야 하는지 정의
    - 일정: 사업 기간, 제안서 제출 기한, 수행 일정
    - 평가 기준: 업체를 어떤 기준으로 선정할지 제시
    - 제출 서류: 제안서, 견적서, 이전 프로젝트 내용, 회사 소개서 등 요구
  

RFP 문서 기본 구성
  . 사업 개요: 사업명, 추진 배경, 목적
  . 사업 범위: 수행해야 할 업무 범위
  . 요구사항: 기능 요구사항, 보안 요구사항, 기술 요구사항
  . 수행 일정: 착수, 분석, 구축, 테스트, 완료 일정
  . 산출물: 보고서, 설계서, 매뉴얼, 소스코드, 교육자료 등
  . 제안서 작성 방법: 제안서 목차, 작성 기준, 제출 방법
  . 평가 기준: 기술 평가, 가격 평가, 수행 경험, 인력 구성


침투 테스트용 도메인 설정하기

기존 도메인 삭제 

named.rfc1912.zones에 설정되어있던 도메인들을 삭제한다
[root@ns1 ~]# vi /etc/named.rfc1912.zones

... ...

[root@ns1 ~]# rm -f /var/named/*.zone

 

도메인 (3개)
  . pentest2026.com
    - 모의해킹 실습 메인 도메인
  . vulnweb2026.com
    - 취약한 웹 애플리케이션 실습 도메인
  . intranet2026.com
    - 내부망/사내 포털 실습 도메인

 

1차 네임서버 도메인 생성

[root@ns1 ~]# ./ns1DomainSetting.sh pentest2026.com

[root@ns1 ~]# ./ns1DomainSetting.sh vulnweb 2026 .com

[root@ns1 ~]# ./ns1DomainSetting.sh intranet 2026 .com

 

도메인 설정 확인 

[root@ns1 ~]# cat /var/named/pentest2026.com.zone

[root@ns1 ~]#  ... ...

 

도메인 질의 확인   
[root@ns1 ~]# dig pentest2026.com +short
192.168.100.24
[root@ns1 ~]# dig vulnweb2026.com +short
192.168.100.24
[root@ns1 ~]# dig intranet2026.com +short
192.168.100.24

 

2차 네임서버

기존 도메인을 삭제한다

[root@ns2 ~]# vi /etc/named.rfc1912.zones

... ...

[root@ns2 ~]# rm -f /var/named/*.zone

 

2차 네임서버 도메인 생성 

[root@ns2 ~]# ./ns2DomainSetting.sh pentest2026.com

[root@ns2 ~]# ./ns2DomainSetting.sh vulnweb 2026 .com

[root@ns2 ~]# ./ns2DomainSetting.sh intranet 2026 .com

 

2차 네임서버에서는 zone 파일을 데이터 타입으로 받아오기 떄문에 존 파일 확인은 굳이 할 필요 없다

바이너리 zone 파일은 cat으로 보면 깨지므로 named-compilezone 명령어로 텍스트 형태로 변환해서 볼 수 있다.
-o 옵션이 없으면 에러가 발생한다.
[root@ns2 ~]# named-compilezone -f raw -F text -o - pentest2026.com /var/named/pentest2026.com.zone

파일 저장

[root@ns2 ~]# named-compilezone -f raw -F text -o pentest2026.txt pentest2026.com /var/named/pentest2026.com.zone

 

도메인 질의 확인   
[root@ns2 ~]# dig pentest2026.com +short
192.168.100.24
[root@ns2 ~]# dig vulnweb2026.com +short
192.168.100.24
[root@ns2 ~]# dig intranet2026.com +short
192.168.100.24


Attacker DNS 설정

Kali 리눅스 네트워크 설정에서 1,2차 네임서버 주소로 변경한다 

┌──(root㉿kali)-[~]
└─# cat /etc/resolv.conf

 

┌──(root㉿kali)-[~]
└─# dig pentest2026.com +short
192.168.100.24

┌──(root㉿kali)-[~]
└─# dig pentest2026.com soa +short
ns1.pentest2026.com. root.pentest2026.com. 2026052801 21600 1800 1209600 10800

┌──(root㉿kali)-[~]
└─# dig pentest2026.com ns +short
ns1.pentest2026.com.
ns2.pentest2026.com.

┌──(root㉿kali)-[~]
└─# dig pentest2026.com mx +short
10 mail.pentest2026.com.


DNS 서버의 영역 전송은 Zone transfer라고 한다.
Zone transfer는 2차 네임서버에서 1차 네임서버의 zone의 대한 정보를 얻어올 때 사용한다.
2차 네임서버에서 도메인을 설정할 때 masters 를 이용해서 1차 네임서버의 IP 주소를 설정해야 한다.
1차 네임서버는 2차 네임서버의 주소를 설정할 수 있다.
기본값은 설정이 없기 때문에 공격자가 zone 에 대한 정보를 얻어올 수 있는 것이다.

DNS 영역 전송
  . Primary DNS 서버의 Zone 정보를 Secondary DNS 서버로 복사하는 과정이다.
  . AXFR/IXFR
    - AXFR: Authoritative Transfer: DNS Zone 정보를 전체 전송
    - IXFR: Incremental Zone Transfer: DNS Zone 변경분 전송
  
┌──(root㉿kali)-[~]
└─# nslookup
> set type=axfr
> pentest2026.com
> exit

┌──(root㉿kali)-[~]
└─# dig pentest2026.com axfr

; <<>> DiG 9.20.15-2-Debian <<>> pentest2026.com axfr

 

1. admin 도메인 추가
pentest2026.com 포워드 존파일에 admin 을 추가한다.

pentest2026.com 포워드 존파일에 admin 을 추가한다.
[root@ns1 ~]# vi /var/named/pentest2026.com.zone

... ... 

admin        IN  A   192.168.100.24

 

[root@ns1 ~]# named-checkconf
[root@ns1 ~]# named-checkzone pentest2026.com /var/named/pentest2026.com.zone

 

2. axfr 영역 전송
zone transfer: zone 에 설정된 내용을 전송
  . 2차 네임서버에서 요청을 할 때만 전송해야 된다.
    - 2차 네임서버가 아닌 곳에서 요청을 하면 전송을 하면 안된다.
      bind 네임서버를 설치하면 기본값은 zone transfer가 Default 로 오픈되어 있다. 
  . axfr 을 이용한 영역 전송
    - AXFR은 DNS 서버 간에 도메인의 전체 Zone 데이터를 전송하는 기능이다.
    - 1차 네임서버(Master DNS) -> 2차 네임서버(Slave DNS)로 전송해서 동기화 할 때 사용한다.
     

[root@ns1 ~]# systemctl restart named.service
[root@ns2 ~]#  named-compilezone -f raw -F text -o - pentest2026.com /var/named/pentest2026.com.zone

 

pentest2026.com 도메인의 존 정보를 2차 네임서버에서 확인하면 admin.pentest2026.com 이 전송된 것을 확인할 수 있다.
2차 네임서버에서 zone 파일이 동기화된 것은 정상적인 것이다.
[root@ns2 ~]#  named-compilezone -f raw -F text -o - pentest2026.com /var/named/pentest2026.com.zone

... ...

admin.pentest2026.com.                        300 IN A          192.168.100.24

... ...

pentest2026.com 도메인의 존 정보를 공격자에서 확인하면 admin.pentest2026.com 이 전송된 것을 확인할 수 있다.
1차 네임서버는 미리 등록된 2차 네임서버에게만 정보를 허용해야 하지만 하지만 아무런 제한 설정을 하지 않으면, 서버는 요청하는 모든 대상을 2차 네임서버로 착각하고 정보를 보내게 된다 


┌──(root㉿kali)-[~]  <= 제3자 (Attacker)
└─# dig pentest2026.com axfr
... ...
admin.pentest2026.com.  300     IN      A       192.168.100.24

... ...

 

3. axfr 영역 전송 제한 

1차 네임서버에서 2차 네임서버만 zone 정보를 가져갈 수 있도록 설정한다.

 

option 부분에 allow-transfer { (2차 네임서버 주소); };를 추가한다  

[root@ns1 ~]# vi /etc/named.conf

... ...

allow-transfer { 192.168.100.201; };

... ...

[root@ns1 ~]# named-checkconf
[root@ns1 ~]# systemctl reload named.service


┌──(root㉿kali)-[~]
└─# dig pentest2026.com axfr


1차 네임서버에서 axfr 영역 전송 제한을 했기 때문에 공격자가 zone 정보를 가져올 수 없다.
; <<>> DiG 9.20.15-2-Debian <<>> pentest2026.com axfr
;; global options: +cmd
; Transfer failed.


DNS 공격툴을 이용한 DNS 정보 탈취

DNS Zone Transfer가 막혀있기 때문에 도메인을 하나씩 질의해서 DNS에 대한 정보를 얻어오는 것이다.



1. 사전파일 생성

┌──(root㉿kali)-[~]
└─# cat << EOF > mydns.txt
www
main
abc
test
admin
EOF

 

1차 네임서버에서 로그를 모니터링 한다.
[root@ns1 ~]# tail -f /var/log/messages


┌──(root㉿kali)-[~]
└─# dig pentest2026.com axfr

; <<>> DiG 9.20.15-2-Debian <<>> pentest2026.com axfr
;; global options: +cmd
; Transfer failed.

 

dnsenum을 사용하여 무작위 대입 공격을 진행한다

┌──(root㉿kali)-[~]
└─# dnsenum --dnsserver 192.168.100.200 -f mydns.txt pentest2026.com


방화벽 

방화벽(firewall)이란 미리 정의된 룰(보안정책)에 기반해서 들어오고 나가는 패킷의 트래픽을 모니터링하고 제어
하는 보안 시스템이다. 

크게 방화벽은 네트워크 전체에서 사용할 수 있고 단일 서버에서 사용할 수 있다. 

네트워
크 전체에서 사용하는 방화벽을 네트워크기반 방화벽이라고 하고 단일 서버에서 사용하는 방화벽을 호스트기반
방화벽이라고 한다.

iptables 패킷 흐름도

 

리눅스 방화벽에 패킷이 NIC(eth0)로 들어오면 nat 테이블의 PREROUTING 체인을 거쳐 라우팅(패킷을 어디로 보
낼 것인지)을 결정하게 된다. 

이때 자신에게 오는 패킷이면 filter 테이블의 INPUT 체인을 통과해서 로컬 소켓(로컬 프로세스)으로 보내지게 된다. 

로컬 소켓(로컬 프로세스)으로 처리된 패킷이 외부로 나갈때는 filter 테이블의
OUTPUT 체인을 통과해서 nat 테이블의 POSTROUTING 체인을 거쳐 NIC(eth0) 로 패킷이 빠져 나간다. 

만약 들어온 패킷이 자신에게 오는게 아니고 자신을 지나가는 패킷이라면 이 패킷에 대해서는 filter 테이블의
FORWARD 체인을 통과해서 nat 테이블의 POSTROUTING 체인을 거쳐 NIC(eth0) 로 패킷이 빠져 나간다. 

 

iptables
iptables 는 Linux 커널의 netfilter 프레임워크를 제어하는 CLI 관리 도구로 IPv4 패킷 필터링, NAT, 패킷 변환
등의 기능을 관리한다.
예전에는 리눅스를 설치하면 기본적으로 iptables 패키지가 설치되어 패킷 필터링 기능이 활성화 되어 있었지만
버전이 올라오면서 Rocky Linux 8/9, RHEL/CentOS 8 이후 계열은 iptables가 기본 방화벽이 아니고 nftables 기반
의 firewalld를 사용한다.

 

ptables 는 table → chain → rule 구조로 구성된다

table 방화벽의 특정 기능 단위를 정의하는 영역 filter, nat, mangle, raw, security 목적별로 패킷 처리 기능을 나누는 역할.

e.g.) filter=패킷 허용/차단, nat=주소 변환
chain 패킷이 방화벽에서 통과하는 논리적 경로 INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING 각 table 내부에 존재하며 패킷이 어떤 시점에서 처리될지 결정
rule chain 에 설정되는 정책 (규칙) 조건(match) + 동작 (target) 사용자가 설정하는 정책. 예: 특정 IP 차단, 포트 허용, DNAT/SNAT 등
 
table의 기능
테이블명 역할
filter 패킷을 허용/차단하는 기본 패킷 필터링 기능을 제공하는 테이블. INPUT, FORWARD, OUTPUT 체인 중심으로
동작.
nat 패킷의 소스·목적지 주소 변환(SNAT/DNAT) 기능을 제공. 1회성 연결 추적(Connection Tracking)이 필요한 패킷만 처리하며, 패킷 필터링 기능은 제공하지 않음. PREROUTING, POSTROUTING, OUTPUT 체인 사용.
mangle 패킷의 QoS, TOS, TTL 변경 등 패킷 자체의 특성을 수정하는 기능을 제공하는 테이블.
raw Connection Tracking 보다 먼저 처리되며, NOTRACK 설정 등 트래킹 제외를 위한 테이블. 패킷 추적을 하지
않도록 지정할 수 있음.
security SELinux 등 강제적 접근통제(MAC) 기반의 패킷 보안 정책을 적용하기 위한 테이블. filter보다 우선순위가 높음.

 

테이블(table)은 소문자로 표기되며 Built-In 체인(chain)은 대문자로 표기된다.

테이블은 사용자가 생성할 수 없고 이미 생성되어 있는 테이블을 사용해야 한다.

테이블에 존재하는 체인이외에 사용자가 따로 생성하는 사용자 정의체인을 생성할 수 있다.

 

테이블(table): 방화벽에서 특정 기능을 제공하는 것
 . 사용자가 생성/삭제/수정할 수 없고 이미 만들어져 있다. 사용자가 삭제는 못한다.

 . 필터 테이블에서 FOWARD를 사용하는 대표적인 예시는 Docker가 있다
체인(chain): 패킷이 이동하는 경로이며 패킷을 제어하는 위치
 . 기본 빌트인 체인(built in) 들은 이미 만들어져 있고 빌트인 체인은 삭제/수정(이름 변경)할 수 없다.
. 사용자가 생성하는 사용자 정의체인들은 사용가 생성/삭제/수정(사용자 정의 체인)할 수 있다.
룰(rule): 각 테이블에 속해있는 체인에 설정하는 방화벽 정책
 . 사용자가 생성/삭제/수정할 수 있고 기본 룰은 이미 만들어져 있지만 생성/삭제/수정이 가능하다.

 

각 테이블에 builtin 으로 설정된 Chain을 확인한다. 테이블은 없는 체인도 있고 모두 다 나오는 체인도 있고
테이블마다 Chain은 다르다. 참고로 테이블은 생략이 가능하며 생략하면 filter 테이블이 된다.
# iptables (-t filter) -nL
# iptables -t nat -nL
# iptables -t mangle -nL
# iptables -t raw -nL
# iptables -t security -nL


실습 iptables 설치 스크립트

# vi iptables_install.sh

#!/bin/sh
# 파일명: iptables_install.sh
# 프로그램 설명: iptables 방화벽 활성화
IPTABLES_CONFIG="/etc/sysconfig/iptables"
systemctl stop firewalld
systemctl disable firewalld
dnf -y install iptables-services
systemctl enable --now iptables
iptables -F
> $IPTABLES_CONFIG
iptables -nL

# chmod 755 iptables_install.sh

# ./iptables_install.sh

 

네트워크 에러 발생시 

[root@ns1 ~]# echo nameserver 168.126.63.1 > /etc/resolv.conf

런타임 환경에서 외부로 연결을 허용한다


iptables 명령어 사용법
iptables 명령어는 아래와 같이 여러가지가 있다

명령어 설명
-A 방화벽 룰 추가하기 (append)
-D 방화벽 룰 삭제하기 (delete)
-C 방화벽 룰 체크하기 (check)
-I 방화벽 룰 삽입하기 (insert)
-R 방화벽 룰 수정하기 (replace)
-L 방화벽 룰 확인하기 (list)
-S 방화벽 룰 명령어 출력하기 (list-rules)
-F 방화벽 룰 초기화하기 (flush)
-Z 방화벽 룰 카운트 값을 0으로 초기화하기 (zero)
-N 사용자 정의 체인 생성하기 (new-chain)
-X 사용자 정의 체인 삭제하기 (delete-chain)
-E 사용자 정의 체인 이름 변경하기 (ename-chain)
-P 방화벽 기본 정책 변경하기 (policy)

-N 사용자 정의 체인 생성,삭제하기

옵션 기능 명령 형식 설명
-N 사용자 정의 체인 생성 iptables [-t table] -N chain 지정한 테이블에 새로운 사용자 정의 체인을 생성한다.
-X 사용자 정의 체인 삭제 iptables [-t table] -X chain 비어 있는 사용자 정의 체인을 삭제한다. (참조하는 규칙이 없어야 함)
-E 사용자 정의 체인명 변경 iptables [-t table] -E old-chain-name new-chain-name 기존 사용자 정의 체인의 이름을 새로운 이름으로 변경한다.

 

Built-in chain은 모두 대문자이고 사용자 정의 체인은 소문자도 만들 수 있다.

chain은 대소문자 구분이 가능하다 

# iptables -N CHAIN1
# iptables -N CHAIN2
# iptables -N CHAIN3
# iptables -N chain4
# iptables -N chain5

 

[root@ns1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)  
target     prot opt source               destination

Chain CHAIN1 (0 references)
target     prot opt source               destination

 

필터 테이블에는 INPUT, FOWARD, OUTPUT (policy ACCEPT) 이 3개의 체인만 있다

Chain CHAIN1 (0 references) 은 사용자 지정 체인이다

 

생성된 사용자 정의 체인 CHAIN1, CHAIN2, CHAIN3, chain4, chain5를 삭제한다.

# iptables -X CHAIN1
# iptables -X CHAIN2
# iptables -X CHAIN3
# iptables -X chain4
# iptables -X chain5


사용자 정의 체인 생성하기 2

# iptables -N WEBSERVER

# iptables -N ADMINIP

# iptables -N ACCEPTIP

# iptables -N BESTIP

# iptables -N DROPIP


-E 사용자 정의 체인 이름 변경하기
형식: iptables [-t table] -E old-chain-name new-chain-name

# iptables -E WEBSERVER WEB

# iptables -E ADMINIP ADMINIPADDR

# iptables -E ACCEPTIP ACCEPTIPADDR

# iptables -E BESTIP BESTIPADDR

# iptables -E DROPIP DROPIPADDR


방화벽 룰 추가하기 (-A, --append)

-A 로 추가하면 방화벽 룰의 정책은 위에서 부터 아래로 순차적으로 추가된다.

# iptables -A INPUT -s 1.1.1.1 -j DROP <= 필터 테이블 INPUT 체인에 -s(출발지) 1.1.1.1 에서 오는 패킷을 버리는 -j DROP 룰을 추가한다