VMware vCenter ๋ก๊ทธ ์์ง
์ด ๋ฌธ์์์๋ Bindplane์ ์ฌ์ฉํ์ฌ VMware vCenter ๋ก๊ทธ๋ฅผ Google Security Operations๋ก ์์งํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ํ์๋ ์์ ๋ก๊ทธ๋ฅผ ํตํฉ ๋ฐ์ดํฐ ๋ชจ๋ธ (UDM)๋ก ๋ณํํฉ๋๋ค. ๋จผ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ํ์ฑํ๋ ค๊ณ ์๋ํ๊ณ , ์คํจํ๋ฉด ๋ฐ์ดํฐ๋ฅผ syslog ๋ฉ์์ง๋ก ์ฒ๋ฆฌํ์ฌ grok ํจํด์ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ์ถ์ถํ๊ณ UDM ์คํค๋ง์ ๋งคํํฉ๋๋ค.
์์ํ๊ธฐ ์ ์
๋ค์ ๊ธฐ๋ณธ ์๊ฑด์ด ์ถฉ์กฑ๋์๋์ง ํ์ธํฉ๋๋ค.
- Google SecOps ์ธ์คํด์ค
- Windows 2016 ์ด์ ๋๋
systemd
๊ฐ ์ค์น๋ Linux ํธ์คํธ - ํ๋ก์ ๋ค์์ ์คํํ๋ ๊ฒฝ์ฐ ๋ฐฉํ๋ฒฝ ํฌํธ๊ฐ ์ด๋ ค ์๋์ง ํ์ธ
- VMware vCenter์ ๋ํ ์ก์ธ์ค ๊ถํ
Google SecOps ์์ง ์ธ์ฆ ํ์ผ ๊ฐ์ ธ์ค๊ธฐ
- Google SecOps ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
- SIEM ์ค์ > ์์ง ์์ด์ ํธ๋ก ์ด๋ํฉ๋๋ค.
- ์์ง ์ธ์ฆ ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. Bindplane์ด ์ค์น๋ ์์คํ ์ ํ์ผ์ ์์ ํ๊ฒ ์ ์ฅํฉ๋๋ค.
Google SecOps ๊ณ ๊ฐ ID ๊ฐ์ ธ์ค๊ธฐ
- Google SecOps ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
- SIEM ์ค์ > ํ๋กํ๋ก ์ด๋ํฉ๋๋ค.
- ์กฐ์ง ์ธ๋ถ์ ๋ณด ์น์ ์์ ๊ณ ๊ฐ ID๋ฅผ ๋ณต์ฌํ์ฌ ์ ์ฅํฉ๋๋ค.
Bindplane ์์ด์ ํธ ์ค์น
๋ค์ ์๋ด์ ๋ฐ๋ผ Windows ๋๋ Linux ์ด์์ฒด์ ์ Bindplane ์์ด์ ํธ๋ฅผ ์ค์นํฉ๋๋ค.
Windows ์ค์น
- ๋ช ๋ น ํ๋กฌํํธ ๋๋ PowerShell์ ๊ด๋ฆฌ์๋ก ์ฝ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux ์ค์น
- ๋ฃจํธ ๋๋ sudo ๊ถํ์ผ๋ก ํฐ๋ฏธ๋์ ์ฝ๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
์ถ๊ฐ ์ค์น ๋ฆฌ์์ค
์ถ๊ฐ ์ค์น ์ต์ ์ ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Syslog๋ฅผ ์์งํ์ฌ Google SecOps๋ก ์ ์กํ๋๋ก Bindplane ์์ด์ ํธ ๊ตฌ์ฑ
- ๊ตฌ์ฑ ํ์ผ์ ์ก์ธ์คํฉ๋๋ค.
config.yaml
ํ์ผ์ ์ฐพ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Linux์์๋/etc/bindplane-agent/
๋๋ ํฐ๋ฆฌ์ ์๊ณ Windows์์๋ ์ค์น ๋๋ ํฐ๋ฆฌ์ ์์ต๋๋ค.- ํ
์คํธ ํธ์ง๊ธฐ (์:
nano
,vi
, ๋ฉ๋ชจ์ฅ)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฝ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด
config.yaml
ํ์ผ์ ์์ ํฉ๋๋ค.receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'VMWARE_VCENTER' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- ์ธํ๋ผ์ ํ์ํ ๋๋ก ํฌํธ์ IP ์ฃผ์๋ฅผ ๋ฐ๊ฟ๋๋ค.
<customer_id>
๋ฅผ ์ค์ ๊ณ ๊ฐ ID๋ก ๋ฐ๊ฟ๋๋ค.- Google SecOps ์์ง ์ธ์ฆ ํ์ผ ๊ฐ์ ธ์ค๊ธฐ ์น์
์์ ์ธ์ฆ ํ์ผ์ด ์ ์ฅ๋ ๊ฒฝ๋ก๋ก
/path/to/ingestion-authentication-file.json
๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
Bindplane ์์ด์ ํธ๋ฅผ ๋ค์ ์์ํ์ฌ ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
Linux์์ Bindplane ์์ด์ ํธ๋ฅผ ๋ค์ ์์ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
sudo systemctl restart bindplane-agent
Windows์์ Bindplane ์์ด์ ํธ๋ฅผ ๋ค์ ์์ํ๋ ค๋ฉด ์๋น์ค ์ฝ์์ ์ฌ์ฉํ๊ฑฐ๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
net stop BindPlaneAgent && net start BindPlaneAgent
VMware vCenter์ฉ Syslog ๊ตฌ์ฑ
- vCenter Server ๊ด๋ฆฌ ์น UI์ ๋ก๊ทธ์ธํฉ๋๋ค.
- Syslog > Forwarding Configuration > Configure๋ก ์ด๋ํฉ๋๋ค.
- Create Forwarding Configuration(์ ๋ฌ ๊ตฌ์ฑ ๋ง๋ค๊ธฐ)์ ์ ํํ๊ณ Bindplane ์์ด์ ํธ IP ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ํ๋กํ ์ฝ ๋๋กญ๋ค์ด์์ ์ค์ Bindplane ์์ด์ ํธ ๊ตฌ์ฑ์ ๋ฐ๋ผ UDP ๋๋ TCP๋ฅผ ์ ํํฉ๋๋ค.
- ํฌํธ ์น์ ์ Bindplane ์์ด์ ํธ ํฌํธ ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
- ํ ์คํธ ๋ฉ์์ง ๋ณด๋ด๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ๋ฉ์์ง๊ฐ ์์ ๋์๋์ง ํ์ธํฉ๋๋ค.
UDM ๋งคํ ํ ์ด๋ธ
๋ก๊ทธ ํ๋ | UDM ๋งคํ | ๋ ผ๋ฆฌ |
---|---|---|
Access Mask |
principal.process.access_mask | 16์ง์์์ 10์ง์๋ก ๋ณํ๋์์ต๋๋ค. |
Account Domain |
principal.administrative_domain | |
Account Name |
principal.user.userid | |
ApplicationProtocol |
additional.fields | |
Authentication Package |
security_result.about.resource.name | |
Client Address |
principal.ip, principal.asset.ip | IP๋ก ํ์ฑ๋ฉ๋๋ค. |
Client Port |
principal.port | ์ ์๋ก ๋ณํ๋์์ต๋๋ค. |
cmd |
target.process.command_line | |
date |
ํ์์คํฌํ | yyyy-MM-dd๋ก ํ์ฑ๋๊ณ ๋ ์ง๋ก ํ์ฑ๋ ์๊ฐ๊ณผ yyyy-MM-dd HH:mm:ss๋ก ๋ณํฉ๋ฉ๋๋ค. |
date_time |
ํ์์คํฌํ | RFC 3339, TIMESTAMP_ISO8601, SYSLOGTIMESTAMP ํ์์ผ๋ก ๋ ์ง๋ก ํ์ฑ๋ฉ๋๋ค. |
desc |
metadata.description | |
eventid |
metadata.product_event_type | eventid - task๋ก ์์ ๊ณผ ๋ณํฉ๋์์ต๋๋ค. |
host_name |
principal.hostname, principal.asset.hostname | |
http_method |
network.http.method | |
ip |
target.ip, target.asset.ip | |
kv_data1 |
ํค-๊ฐ ์์ผ๋ก ํ์ฑ๋ฉ๋๋ค. | |
kv_data2 |
ํค-๊ฐ ์์ผ๋ก ํ์ฑ๋ฉ๋๋ค. | |
kv_msg1.cipher |
network.tls.cipher | |
kv_msg1.ctladdr |
intermediary.labels | |
kv_msg1.daemon |
security_result.about.labels | |
kv_msg1.from |
network.email.from | mail_from์ @ ๊ฐ ํฌํจ๋์ง ์์ผ๋ฉด @local์ด ์ถ๊ฐ๋ฉ๋๋ค. |
kv_msg1.msgid |
network.email.mail_id | |
kv_msg1.proto |
security_result.about.labels | |
kv_msg1.relay |
intermediary.hostname, intermediary.ip | (HOSTNAME)์ผ๋ก ํ์ฑ๋จ [IP] ๋๋ HOSTNAME. relay_domain์ด ์์ผ๋ฉด intermediary.hostname์ผ๋ก ์ค์ ํ๊ณ relay_ip๊ฐ ์์ผ๋ฉด intermediary.ip๋ก ๋ณํฉ๋ฉ๋๋ค. |
kv_msg1.size |
network.sent_bytes | ๋ถํธ ์๋ ์ ์๋ก ๋ณํ๋์์ต๋๋ค. |
kv_msg1.stat |
security_result.summary | |
kv_msg1.verify |
security_result.description, security_result.action | kv_msg1.verify๊ฐ FAIL์ด๋ฉด security_result.action์ด BLOCK์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
kv_msg1.version |
network.tls.version | |
labels.log_type |
metadata.product_event_type | |
labels.net.host.ip |
principal.ip, principal.asset.ip | |
labels.net.host.port |
principal.port | |
labels.net.peer.ip |
target.ip, target.asset.ip | |
labels.net.peer.port |
target.port | |
labels.net.transport |
network.ip_protocol | labels.net.transport๊ฐ TCP์ด๋ฉด TCP์ ๋๋ค. |
level |
security_result.severity | ์์ค์ด INFO/Informational/DEBUG/info/Information์ด๋ฉด INFORMATIONAL, ์์ค์ด ERROR/error์ด๋ฉด ERROR, ์์ค์ด WARNING์ด๋ฉด LOW์ ๋๋ค. |
log.file.path |
target.process.file.full_path | |
logName |
security_result.category_details | |
Logon Account |
principal.user.userid | |
Logon Type |
extensions.auth.mechanism | logon_type์ด 2/Interactive์ด๋ฉด INTERACTIVE, logon_type์ด 3/8์ด๋ฉด NETWORK, logon_type์ด 4์ด๋ฉด BATCH, logon_type์ด 5์ด๋ฉด SERVICE, logon_type์ด 7์ด๋ฉด UNLOCK, logon_type์ด 9์ด๋ฉด NEW_CREDENTIALS, logon_type์ด 10์ด๋ฉด REMOTE_INTERACTIVE, logon_type์ด 11์ด๋ฉด CACHED_INTERACTIVE, ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ MECHANISM_UNSPECIFIED์ ๋๋ค. |
mail_from |
network.email.from | mail_from์ @ ๊ฐ ํฌํจ๋์ง ์์ผ๋ฉด @local์ด ์ถ๊ฐ๋ฉ๋๋ค. |
mail_to |
network.email.to | mail_to์ @ ๊ฐ ํฌํจ๋์ง ์์ผ๋ฉด @local์ด ์ถ๊ฐ๋ฉ๋๋ค. |
message |
grok ํจํด์ผ๋ก ํ์ฑ๋์์ต๋๋ค. | |
namespace |
principal.namespace | |
port |
target.port | ์ ์๋ก ๋ณํ๋์์ต๋๋ค. |
process_id |
target.process.pid | |
providername |
principal.application | |
Relative Target Name |
target.file.full_path | |
resource.labels.project_id |
src.cloud.project.id | |
resource.type |
src.labels | |
response_status |
network.http.response_code | ์ ์๋ก ๋ณํ๋์์ต๋๋ค. |
sec_desc |
security_result.description | |
Security ID |
target.user.windows_sid | |
security_result_action_detail |
security_result.action_details | |
server_name |
target.hostname, target.asset.hostname | |
Share Name |
target.resource.name | |
Source Network Address |
principal.ip, principal.asset.ip | IP๋ก ํ์ฑ๋ฉ๋๋ค. |
Source Port |
principal.port | ์ ์๋ก ๋ณํ๋์์ต๋๋ค. |
summary |
security_result.summary | |
target_host |
target.hostname, target.asset.hostname | |
target_url |
target.url | |
target_userid |
target.user.userid | |
time |
ํ์์คํฌํ | HH:mm:ss๋ก ํ์ฑ๋๊ณ ๋ ์ง๋ก ํ์ฑ๋ ๊ฒฝ์ฐ yyyy-MM-dd HH:mm:ss๋ก ๋ ์ง์ ๋ณํฉ๋ฉ๋๋ค. |
upn_name |
intermediary.url | |
URL |
target.url | |
User ID |
target.user.windows_sid | |
user_id |
principal.user.userid | |
UserAgent |
network.http.user_agent | |
metadata.event_type | ๋ฉ์์ง์ API_HEALTH ๋๋ JobDispatcher๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ STATUS_UPDATE๋ก ์ค์ ํ๊ณ , ๋ฉ์์ง์ logged in as๊ฐ ํฌํจ๋๊ณ target_userid๊ฐ ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ USER_LOGIN์ผ๋ก ์ค์ ํ๊ณ , ๋ฉ์์ง์ Leave Validate๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ SCAN_HOST๋ก ์ค์ ํ๊ณ , ๋ฉ์์ง์ Getting IP Address from host๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ NETWORK_UNCATEGORIZED๋ก ์ค์ ํ๊ณ , ๋ฉ์์ง์ Wrote vpxd health๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ RESOURCE_WRITTEN์ผ๋ก ์ค์ ํ๊ณ , has_principal ๋ฐ has_target์ด true์ด๊ณ application_protocol์ด ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ NETWORK_HTTP๋ก ์ค์ ํ๊ณ , process_id ๋ฐ cmd๊ฐ ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ PROCESS_LAUNCH๋ก ์ค์ ํ๊ณ , user_id๊ฐ ๋น์ด ์์ง ์๊ฑฐ๋ eventid๊ฐ 4776์ธ ๊ฒฝ์ฐ USER_UNCATEGORIZED๋ก ์ค์ ํ๊ณ , eventid๊ฐ 4624/4768/4769์ธ ๊ฒฝ์ฐ USER_LOGIN์ผ๋ก ์ค์ ํ๊ณ , eventid๊ฐ 4634/4647์ธ ๊ฒฝ์ฐ USER_LOGOUT์ผ๋ก ์ค์ ํ๊ณ , eventid๊ฐ 5145์ธ ๊ฒฝ์ฐ USER_RESOURCE_ACCESS๋ก ์ค์ ํ๊ณ , host_name์ด ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ STATUS_UPDATE๋ก ์ค์ ํ๊ณ , ๊ทธ ์ธ์ ๊ฒฝ์ฐ GENERIC_EVENT๋ก ์ค์ ํฉ๋๋ค. | |
extensions.auth.type | eventid๊ฐ 4624/4768/4769์ธ ๊ฒฝ์ฐ MACHINE์ผ๋ก ์ค์ ํฉ๋๋ค. | |
metadata.log_type | VMWARE_VCENTER๋ก ์ค์ ๋ฉ๋๋ค. | |
metadata.vendor_name | VMWARE๋ก ์ค์ ๋ฉ๋๋ค. | |
metadata.product_name | VCENTER๋ก ์ค์ ๋ฉ๋๋ค. | |
security_result.action | response_status๊ฐ 200์ด๊ฑฐ๋ ์์ ์ด ํ์ฉ์ธ ๊ฒฝ์ฐ ALLOW๋ก ์ค์ ๋ฉ๋๋ค. |
๋์์ด ๋ ํ์ํ์ ๊ฐ์? ์ปค๋ฎค๋ํฐ ํ์ ๋ฐ Google SecOps ์ ๋ฌธ๊ฐ๋ก๋ถํฐ ๋ต๋ณ์ ๋ฐ์ผ์ธ์.