CMD Solutions با استفاده از Steampipe منبع باز ابزارهایی را برای تضمین کنترل مستمر ایجاد کرد تا معیارهای عملکرد امنیت اطلاعات را به عنوان عبارات SQL تعریف کند.
Ciaran Finnegan رهبر عمل امنیت سایبری در CMD Solutions استرالیا است و فیل ماسین یک مشاور ارشد امنیتی در آنجا است. . حدود یک سال پیش آنها شروع به استفاده از Steampipe و افزونه CrowdStrike برای اسکن محیط AWS مشتریان خود.
اکنون Finnegan و Massyn در حال ساختن یک سیستم داخلی برای آنچه آنها “تضمین کنترل مستمر” می نامند. راه دیگری برای گفتن آن ممکن است «KPI به عنوان کد» باشد. مثالی از KPI (شاخص عملکرد کلیدی):
آسیبپذیریهای بحرانی یا با شدت بالا در چارچوب زمانی خطمشی سازمان اصلاح میشوند.
چگونه آن هدف را به کد ترجمه می کنید؟ با Steampipe، این کار را با نوشتن پرسشهای SQL انجام میدهید که میتوانند به APIهای متنوعی که پشته نرمافزار شما نشان میدهد بپیوندند. در این مورد، این بدان معناست که از یک سیستم مدیریت نقطه پایانی، CrowdStrike، پرس و جو کنید، سپس با اطلاعات یک سیستم مدیریت نیروی کار، Salesforce ملحق شوید – با درک این که یکی یا هر دوی اینها ممکن است تغییر کنند – برای تولید نتایج پرس و جو که از یک آسیب پذیری به یک دستگاه نگاشت می شود. یک شخص.
پرسمان اینجاست.
SELECT
ZTA.system_serial_number || ' (' || salesforce_krow__project_resources__c.name || ')' as resource,
CASE
WHEN ZTA.assessment ->> 'os' = '100' THEN 'ok'
ELSE 'alarm'
END AS status,
ZTA.system_serial_number || ' (' || salesforce_krow__project_resources__c.name || ' has a score of ' || (ZTA.assessment ->> 'os') as reason,
jsonb_path_query_array(ZTA.assessment_items['os_signals'], '$[*] ? (@.meets_criteria != "yes").criteria') #>> '{}' as detail
FROM
crowdstrike_zta_assessment ZTA
-- Link the serial number to the Salesforce data, so we can find the owner
-- LEFT JOIN is important, in case there isn't a link, we still want to see the data
LEFT JOIN salesforce_fixed_asset__c
ON ZTA.system_serial_number = serial_number__c
-- Here an INNER JOIN is necessary. If the serial number exists in Krow, but no owner, that could indicate a
-- a data inconsistency in Krow, which will break the query. We want an INNER JOIN, because both entries must exist
INNER JOIN salesforce_krow__project_resources__c
ON salesforce_fixed_asset__c.project_resource__c = salesforce_krow__project_resources__c.id
جدولهای موجود در بازی توسط CrowdStrike و Salesforce. هیچ یک از جداول Salesforce از پیش تعریف شده نیاز را برآورده نمی کرد، اما این مهم نبود زیرا CMD Solutions از اشیاء Salesforce سفارشی خود استفاده می کرد و افزونه Salesforce می تواند به صورت پویا اشیاء سفارشی را بدست آورید.
شما می توانید پرس و جو را به هر یک از روش هایی اجرا کنید که پرس و جوهای Steampipe اجرا می شوند: با Steampipe CLI، با psql
(یا هر Postgres CLI)، با Metabase (یا هر ابزار BI سازگار با Postgres)، با پایتون (یا هر زبان برنامه نویسی). یا همانطور که CMD Solutions انجام داده است، می توانید یک پرس و جو را در یک کنترل Steampipe قرار دهید که بخشی از یک معیار است که در خط فرمان اجرا می شود با بررسی steampipe، یا به عنوان داشبورد با داشبورد steampipe a>.
از پرس و جوها تا کنترل ها و معیارها
در اینجا کنترلی است که پرس و جو را بسته بندی می کند. این فقط یک لفاف نازک است که یک KPI را نامگذاری و تعریف می کند.
control "SEC_002" {
title = "SEC-002 - % of in-scope personnel compute devices with a Crowdstrike Agent Zero Trust Score for OS of 100"
sql = <<EOT
-- SQL as above
EOT
}
کنترل در یک معیار جمع میشود.
benchmark "sec" {
title = "Security"
children = [
...
control.SEC_002
...
]
}
بنابراین می توانید SEC_002 را به صورت جداگانه اجرا کنید: steamppipe check control.SEC_002
. یا میتوانید تمام کنترلهای موجود در معیار را اجرا کنید: steampipe check benchmark.sec
. نتایج میتوانند در فرمتهای متنوع برای تجزیه و تحلیل پاییندستی ارائه شوند. p>
اما ابتدا، کجا و چگونه steamppipe check
را به صورت برنامه ریزی شده اجرا کنیم؟ از اسناد آنها:
steampipe-scheduled-job-runner
بررسی های معیار Steampipe برنامه ریزی شده را به صورت ایمن و ارزان در AWS با استفاده از ECS Fargate اجرا کنید. ما از AWS Copilot برای تعریف توابع Step و کارهای برنامه ریزی شده AWS ECS Fargate برای اجرای چک های Steampipe در Docker استفاده می کنیم. معیارها و کنترلهای Steampipe در زمان اجرا از یک مخزن git برای پشتیبانی از جریان کاری GitOps< بازیابی میشوند. /p>
این کار هر شب اجرا میشود، درخواستها را از یک مخزن حذف میکند، آنها را در برابر اهداف اجرا میکند، و خروجیها را به Amazon S3 صادر میکند—بهعنوان Markdown، و بهعنوان JSON که توسط یک الگوی سفارشی.
بررسی پیکربندی DMARC
اینم KPI دیگری:
همه دامنه های ایمیل سازمانی برای DMARC پیکربندی شده اند
و در اینجا جستار مربوطه، دوباره در یک کنترل پیچیده شده است.
control "INF_001" {
title = "INF-001 - Organisational email domains without DMARC configured"
description = "Protect against spoofing & phishing, and help prevent messages from being marked as spam. See https://support.google.com/a/answer/2466563?hl=en for more details."
sql = <<EOT
WITH ASSET_LIST as (
SELECT
D.domain,
concat('_dmarc.',D.domain) as dmarc,
COUNT(N.*) as MXCount
FROM
csv.domains D
LEFT JOIN net_dns_record N on N.domain = D.domain and N.type = 'MX'
GROUP BY
D.domain,
concat('_dmarc.',D.domain)
)
SELECT
A.domain as resource,
CASE
WHEN A.MXCount = 0 then 'skip'
WHEN N.value LIKE '%p=reject;%' THEN 'ok'
WHEN N.value LIKE '%p=quarantine;%' THEN 'ok'
ELSE 'alarm'
END as status,
CASE
WHEN A.MXCount = 0 then 'No MX record for domain ' || A.domain
WHEN N.value LIKE '%p=reject;%' THEN 'Domain ' || A.domain || ' has a reject policy.'
WHEN N.value LIKE '%p=quarantine;%' THEN 'Domain ' || A.domain || ' has a quarantine policy. Consider making it reject.'
WHEN N.value IS NULL THEN 'Domain ' || A.domain || ' has no DMARC policy defined.'
WHEN N.value LIKE '%p=none;%' THEN 'Domain ' || A.domain || ' has a dmarc policy of none.'
ELSE 'Domain ' || A.domain || ' has no DMARC policy'
END as reason,
A.domain as domain
FROM
ASSET_LIST A
LEFT JOIN net_dns_record N on N.domain = A.dmarc and N.type = 'TXT' and N.value like 'v=DMARC1%'
EOT
}
جدولهای اینجا از CSV و Net. مانند Salesforce، افزونه CSV جداول را به صورت پویا بدست می آورد. در این مورد، فهرست دامنههایی که باید زندگیها را بررسی کنید در فایلی به نام domains.csv
که از یک API مدیریت سیستم نام دامنه بازیابی شده است. نام دامنهها با جدول net_dns_record پیوند میدهند. رکوردهای MX، که نام آنها برای DMARC پیکربندی شده است.
مانند همه کنترلهای Steampipe، اینها نیز ستونهای مورد نیاز را گزارش میکنند. a> منبع
، وضعیت
و دلیل
. این صرفاً یک قرارداد است، زیرا میتوانید انواع پرسشها را در برابر جداول ارائهشده توسط افزونه بنویسید، اما وقتی از این قرارداد پیروی میکنید، درخواستهای شما در اکوسیستم معیار و داشبورد Steampipe پخش میشوند.
بررسی حساب های کاربری غیرفعال
این درست است که پیوستن به APIها – با SQL به عنوان روش رایج برای استدلال بر روی آنها – ابرقدرت نهایی Steampipe است. اما شما نباید در میان APIها بپیوندید. بسیاری از کنترل های مفید یک یا چند جدول ارائه شده توسط یک افزونه را پرس و جو می کنند.
یک KPI دیگر در اینجا آمده است:
حسابهای غیرفعال Okta در چارچوبهای زمانی خطمشی سازمان بررسی میشوند
این کنترل مربوطه است.
control "IAM_001" {
title = "IAM-001 - Dormant Okta accounts are accounts that have not logged on in the last 30 days"
sql = <<EOT
SELECT
U.email as resource,
CASE
WHEN U.status <> 'ACTIVE' THEN 'skip'
WHEN date_part('day', CURRENT_TIMESTAMP - U.activated) < 30 OR date_part('day', CURRENT_TIMESTAMP - U.last_login) < 30 THEN 'ok'
ELSE 'alarm'
END as status,
CASE
WHEN U.status <> 'ACTIVE' THEN 'User ' || u.email || ' is no longer active'
WHEN U.last_login is null THEN 'User ' || u.email || ' has never logged on'
WHEN date_part('day', CURRENT_TIMESTAMP - U.activated) < 30 OR date_part('day', CURRENT_TIMESTAMP - U.last_login) < 30 THEN 'Last logon was on ' || U.last_login
ELSE 'User ' || u.email || ' last logon on ' || U.last_login
END as reason,
U.email,
U.last_login
FROM
okta_user U
EOT
}
کنترلهایی مانند این منطق تجاری را به روشی واضح و خوانا بیان میکنند و فقط به مهارت SQL کمی نیاز دارند.
مراحل بعدی
با جمعآوری عکسهای فوری روزانه، Finnegan و Massyn در حال بررسی راههایی برای تجسم آنها و شناسایی روندها و شاخصهای ریسک کلیدی (KRI) هستند. یک اسکریپت پایتون خروجی سفارشی steampipe check
را می خواند و خروجی های JSON و Markdown را می سازد که به S3 می روند. آنها نمونه اولیه داشبورد Steampipe را برای تجسم پرس و جوها و در نظر گرفتن اینکه چگونه یک ابزار تجسم ممکن است به تکمیل تصویر کمک کند، ساخته اند.
چرا این همه کار؟ فینیگان میگوید: «محصولاتی در بازار وجود دارد که میتوانیم آنها را بخریم، اما آنها با تمام خدمات ما یکپارچه نمیشوند، و نقشهای دقیق از اهداف تجاری تا بیانیههای SQL را به ما نمیدهند. این جادوی Steampipe برای ما است.”
برای جزئیات بیشتر، مخزن های Fargate runner و ماژول تضمین کنترل مستمر آنها. اگر داستان مشابهی برای گفتن دارید، لطفا تماس بگیرید. ما همیشه مشتاقیم بدانیم مردم چگونه از Steampipe استفاده می کنند.
پست های مرتبط
چگونه Steampipe KPI ها را به عنوان کد فعال می کند
چگونه Steampipe KPI ها را به عنوان کد فعال می کند
چگونه Steampipe KPI ها را به عنوان کد فعال می کند