Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

JINIers

[Qwiklabs] Google Cloud Packet Mirroring with OpenSource IDS 본문

GCP/Qwiklabs

[Qwiklabs] Google Cloud Packet Mirroring with OpenSource IDS

JINIers 2022. 3. 3. 13:31

오픈 소스 IDS를 사용한 google cloud 패킷 미러링

 

트래픽 미러링 : 보안 및 네트워크 분석을 위한 google cloud 네트워킹의 핵심 기능

※유의※

Packet Mirroring : 각 패킷의 전체 페이로드를 캡쳐하므로 추가 대역폭을 소비한다.

샘플링 주기를 기반으로 하지 않기 때문에 더 나은 문제해결, 보안 솔루션 및 상위계층 응용 프로그램 기반 분석에 사용할 수 있음

패킷 미러링 정책을 기반으로 한다.

  • Region
  • VPC Network(s)
  • Mirrored Source(s)
  • Collector (destination)
  • Mirrored traffic (filter)

 

고려사항

  • TCP, UDP 및 ICMP 트래픽만 미러링 가능
  • Mirrored Source(s)와 Collector (destination)는 동일한 지역에 있어야하지만, 해당 vpc가 적절하게 피어링 되는 다른 영역 및 다른 vpc에도 있을 수 있음
  • 영역간 추가 대역폭 요금 적용
  • 미러링 되는 트래픽을 제한하기 위해 필터를 사용할 수 있음

 

** IDS에 많이 사용된다.

 


실습설명

패킷 미러링 사용방법을 보여준다.

 

  • ↑ 그림처럼 google cloud networking 환경 구축
  • web servers 역할의 2개 가상머신 생성
  • ids 역할의 단일 가상머신 생성
  • 패킷 미러링을 위한 Collector 역할을 하는 내부 로드밸런서(ILB) 생성
  • IDS VM에 오픈소스 IDS(suricata) 설치 및 구성
  • 몇가지 기본 ids 경고 규칙 검토
  • 패킷 미러 정책 생성 등

1. 네트워킹 공간 구축


[가상 사설망 생성]

gcloud compute networks create dm-stamford \
--subnet-mode=custom

[us-west4의 미러링된 트래픽을 위해 vpc에 서브넷 추가]

gcloud compute networks subnets create dm-stamford-uswest4 \
--range=172.21.0.0/24 \
--network=dm-stamford \
--region=us-west4


[us-west4의 수집기용 vpc에 서브넷 추가]

gcloud compute networks subnets create dm-stamford-uswest4-ids \
--range=172.21.1.0/24 \
--network=dm-stamford \
--region=us-west4




2. 방화벽 규칙 및 Cloud NAT 만들기

[규칙1. 모든 소스의 모든 vm에 대한 표준 http포트(tcp 80) 및 icmp 프로토콜 허용]

gcloud compute firewall-rules create fw-dm-stamford-allow-any-web \
--direction=INGRESS \
--priority=1000 \
--network=dm-stamford \
--action=ALLOW \
--rules=tcp:80,icmp \
--source-ranges=0.0.0.0/0

 


[규칙2. ids가 모든 소스에서 모든 트래픽 수신 허용]

* 이후 섹션에서 ids vm에 공용 ip를 제공하지 않도록 주의할 것!

gcloud compute firewall-rules create fw-dm-stamford-ids-any-any \
--direction=INGRESS \
--priority=1000 \
--network=dm-stamford \
--action=ALLOW \
--rules=all \
--source-ranges=0.0.0.0/0 \
--target-tags=ids

 


[규칙 3. 모든 vm에 대해 'google cloud iap proxy' ip 범위 tcp port 22 허용하여 cloud console을 통해 vm에 ssh 할 수 있도록 함]

 

gcloud compute firewall-rules create fw-dm-stamford-iapproxy \
--direction=INGRESS \
--priority=1000 \
--network=dm-stamford \
--action=ALLOW \
--rules=tcp:22,icmp \
--source-ranges=35.235.240.0/20

 

[cloud router 생성]

* 전제조건 : cloud router는 해당지역에서 먼저 구성되어야함

gcloud compute routers create router-stamford-nat-west4 \
--region=us-west4 \
--network=dm-stamford

 

[cloud NAT 구성]

* 공용 ip 없이 vm에 대한 인터넷 액세스를 제공하려면 cloud nat를 생성해야함

gcloud compute routers nats create nat-gw-dm-stamford-west4 \
--router=router-stamford-nat-west4 \
--router-region=us-west4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges

3. 가상머신 생성

[web server용 인스턴스 템플릿 생성]

gcloud compute instance-templates create template-dm-stamford-web-us-west4 \
--region=us-west4 \
--network=dm-stamford \
--subnet=dm-stamford-uswest4 \
--machine-type=g1-small \
--image=ubuntu-1604-xenial-v20200807 \
--image-project=ubuntu-os-cloud \
--tags=webserver \
--metadata=startup-script='#! /bin/bash
  apt-get update
  apt-get install apache2 -y
  vm_hostname="$(curl -H "Metadata-Flavor:Google" \
  http://169.254.169.254/computeMetadata/v1/instance/name)"
  echo "Page served from: $vm_hostname" | \
  tee /var/www/html/index.html
  systemctl restart apache2'

 


[webServer에 대한 관리형 인스턴스 그룹 생성]

* 인스턴스 템플릿 이용 2개의 웹서버 생성

gcloud compute instance-groups managed create mig-dm-stamford-web-uswest4 \
    --template=template-dm-stamford-web-us-west4 \
    --size=2 \
    --zone=us-west4-a

 


[IDS VM용 인스턴스 템플릿 생성]

* us-west4 에서 공개 ip가 없는 우분투 서버 준비

gcloud compute instance-templates create template-dm-stamford-ids-us-west4 \
--region=us-west4 \
--network=dm-stamford \
--no-address \
--subnet=dm-stamford-uswest4-ids \
--image=ubuntu-1604-xenial-v20200807 \
--image-project=ubuntu-os-cloud \
--tags=ids,webserver \
--metadata=startup-script='#! /bin/bash
  apt-get update
  apt-get install apache2 -y
  vm_hostname="$(curl -H "Metadata-Flavor:Google" \
  http://169.254.169.254/computeMetadata/v1/instance/name)"
  echo "Page served from: $vm_hostname" | \
  tee /var/www/html/index.html
  systemctl restart apache2'

 


[IDS VM에 대한 관리형 인스턴스 그룹 생성]

* ids로 구성할 vm 생성

gcloud compute instance-groups managed create mig-dm-stamford-ids-uswest4 \
    --template=template-dm-stamford-ids-us-west4 \
    --size=1 \
    --zone=us-west4-a




4. 내부 LoadBalancer 생성

[백엔드 서비스에 대한 기본 상태 확인]

gcloud compute health-checks create tcp hc-tcp-80 --port 80

[ILB에 사용할 백엔드 서비스 그룹 생성]

gcloud compute backend-services create be-dm-stamford-suricata-us-west4 \
--load-balancing-scheme=INTERNAL \
--health-checks=hc-tcp-80 \
--network=dm-stamford \
--protocol=TCP \
--region=us-west4

[생성된 ids 인스턴스 그룹 → 백엔드 서비스 그룹에 추가]

gcloud compute backend-services add-backend be-dm-stamford-suricata-us-west4 \
--instance-group=mig-dm-stamford-ids-uswest4 \
--instance-group-zone=us-west4-a \
--region=us-west4

[(컬렉션 엔드포인트 역할을 하는) 프런트엔드 전달 규칙 생성]

gcloud compute forwarding-rules create ilb-dm-stamford-suricata-ilb-us-west4 \
 --load-balancing-scheme=INTERNAL \
 --backend-service be-dm-stamford-suricata-us-west4 \
 --is-mirroring-collector \
 --network=dm-stamford \
 --region=us-west4 \
 --subnet=dm-stamford-uswest4-ids \
 --ip-protocol=TCP \
 --ports=all

5. 오픈소스 IDS 설치(Suricata)

 

mig-dm-stamford-ids-~ ssh >

sudo apt-get update -y

sudo apt-get install libpcre3-dbg libpcre3-dev autoconf automake libtool libpcap-dev libnet1-dev libyaml-dev zlib1g-dev libcap-ng-dev libmagic-dev libjansson-dev libjansson4 -y

sudo apt-get install libnspr4-dev -y

sudo apt-get install libnss3-dev -y

sudo apt-get install liblz4-dev -y

sudo apt install rustc cargo -y




[수리카타 설치]

sudo add-apt-repository ppa:oisf/suricata-stable -y

sudo apt-get update -y

sudo apt-get install suricata -y

 


[설치확인]

suricata -V

6. Suricata 구성 및 검토

[백업]

mig-dm-stamford-ids-~ ssh >

sudo systemctl stop suricata
sudo cp /etc/suricata/suricata.yaml /etc/suricata/suricata.backup

[새 suricata 구성 파일 및 요약된 규칙파일 다운로드 및 교체]

wget https://storage.googleapis.com/tech-academy-enablement/GCP-Packet-Mirroring-with-OpenSource-IDS/suricata.yaml

wget https://storage.googleapis.com/tech-academy-enablement/GCP-Packet-Mirroring-with-OpenSource-IDS/my.rules

sudo mkdir /etc/suricata/poc-rules

sudo cp my.rules /etc/suricata/poc-rules/my.rules

sudo cp suricata.yaml /etc/suricata/suricata.yaml

 

[수리카타 서비스 시작]

sudo systemctl start suricata
sudo systemctl restart suricata




[테스트를 위한 단순 수리카타 규칙 검토]

cat /etc/suricata/poc-rules/my.rules


-> 4개 규칙과 설명이 표시되어야함(udp, http, icmp, tcp)


7. 패킷 미러 정책 구성

패킷 미러정책 설정은 명령어 한번으로 완료할 수 있음
1. Region
2. VPC Network(s)
3. Mirrored Source(s)
4. Collector (destination)
5. Mirrored traffic (filter)



[패킷 미러링 정책 구성]

cloud shell > 

gcloud compute packet-mirrorings create mirror-dm-stamford-web \
--collector-ilb=ilb-dm-stamford-suricata-ilb-us-west4 \
--network=dm-stamford \
--mirrored-subnets=dm-stamford-uswest4 \
--region=us-west4

8. 테스트 패킷 미러링

gcloud compute instances list
# vm 인스턴스 ip 확인

 


[테스트 패킷 미러링]

mig-dm-stamford-ids-~ ssh >

sudo tcpdump -i ens4 -nn -n "(icmp or port 80) and net 172.21.0.0/24"

 


[미러링된 서브넷에 대한 트래픽 생성]

mig-dm-stamford-ids-~ ssh >

ping -c 4 [PUBLIC_IP_WEB1]
ping -c 4 [PUBLIC_IP_WEB2]

http://[PUBLIC_IP_WEB1]/
http://[PUBLIC_IP_WEB2]/


하면 챱챱챱 뜬다.

하지만 성격이 급해서 하나하나 기다리지 못하고 몽땅쳐서 기다려버린 나..

패킷이 뜨긴 뜨네... 아주 느리게... 무슨 달팽이마냥..

20분 기다려서 얻긴 얻음..

좀 떠... 뜨라고...

하.. 진짜 성질 급하면 이거 기다리는 것도 일이다🤷‍♂️


9. 테스트 Suricata IDS 검사 및 경고

mig-dm-stamford-ids-~ ssh >

cat /etc/suricata/poc-rules/my.rules

[테스트 1 : Test egress UDP rule/alert]

웹서버 1 ssh > 

dig @8.8.8.8 example.com



mig-dm-stamford-ids-~ ssh >

egrep "BAD UDP DNS" /var/log/suricata/eve.json

 

test 1. web server ssh
test 1. IDS ssh


[테스트 2 : Test egress "TCP" rule/alert]

웹서버 1 ssh > 

telnet 100.64.1.1 6667

후 종료 ctrl+c

mig-dm-stamford-ids-~ ssh >

egrep "BAD TCP" /var/log/suricata/eve.json

test 2. web server ssh 
test 2. IDS ssh


[테스트 3 : Test ingress "ICMP" rule/alert]

웹서버 1 ssh > 

ping -c 3 web_server1_expternal_IP


mig-dm-stamford-ids-~ ssh >

egrep "BAD ICMP" /var/log/suricata/eve.json

test 3. web server ssh
test3. IDS ssh


[테스트 4 : Test ingress "HTTP" rule/alert]

웹서버 1 ssh > 

http://[PUBLIC_IP_WEB1]/index.php

-> 홈페이지로 들어가야 로그가 뜸

mig-dm-stamford-ids-~ ssh >

egrep "BAD HTTP" /var/log/suricata/eve.json

 

test 4. web server ssh
test 4. http 접속
test 4. IDS ssh

 

Comments