소개
VMware Carbon Black Audit and Remediation은 실시간 평가 및 교정 솔루션으로, 팀이 조직 전반에 걸쳐 엔드포인트의 시스템 상태를 보다 빠르고 쉽게 감사 및 변경할 수 있도록 지원합니다. VMware Carbon Black Audit and Remediation은 원래 Facebook에서 시작한 오픈 소스 프로젝트 osquery(https://osquery.io)를 기반으로 구축되었습니다.
이 안내서에서는 조직에서 쿼리를 구성하고 실행하기 위한 모범 사례를 제공합니다. 이 안내서에서는 VMware Carbon Black Audit and Remediation 및 SQLite 구문에 대한 기본적인 지식이 있다고 가정합니다.
osquery
VMware Carbon Black Audit and Remediation은 SQLite를 기반으로 구축되므로 이를 활용하는 것이 현명합니다. 엔드포인트에서 직접 osquery에 액세스하여 쿼리를 구성하고 테스트하는 것이 매우 유용합니다. 이렇게 하면 센서가 다시 체크인할 때까지 기다릴 필요 없이 쿼리에 대한 즉각적인 피드백을 받을 수 있습니다. VMware Carbon Black Audit and Remediation에 표시되지 않은 경고 메시지는 osquery에 직접 액세스할 때도 표시됩니다.
이 섹션에서는 설치 과정을 안내합니다.
osquery 버전
osquery 설치를 시작하기 전에 현재 버전의 센서가 실행 중인 osquery 버전을 확인해야 합니다. 새 테이블이 항상 추가되므로 올바른 스키마를 보려면 이 정보가 필요합니다. 운영 체제(Windows, MacOS, Linux)마다 최신 센서 버전을 실행하는 경우에도 osquery 버전이 다를 수 있습니다. 릴리스 정보에서 이 정보를 찾을 수 있지만 실시간 응답을 사용하여 엔드포인트 자체에서 정보를 가져오는 것이 더 쉽습니다.
실시간 쿼리 세션을 열고 OS에서 나타내는 다음 명령을 실행합니다.
- Windows: execfg “\program files\confer\blades\livequery\osqueryi.exe” –version
- MacOS: 지원되지 않습니다. 버전은 릴리스 노트에서 가져와야 합니다.
- Linux: execfg /opt/carbonblack/psc/blades/40E797FD-4322-4D33-8E8C-EF697F4C2323/osqueryi –version
- 또는 user exchange의 다음 페이지를 참조하십시오 : https://community.carbonblack.com/t5/Audit-and-Remediation-Documents/Carbon-Black-Cloud-Sensor-Support-for-osquery/ta-p/82901
osquery 스키마
올바른 OSQuery 버전이 있으면 해당 스키마 페이지(https://osquery.io/schema)를 볼 수 있습니다. 처음에 스키마 페이지에 도착하면 최신 스키마를 볼 수 있습니다. Osquery Version: 드롭다운(오른쪽 위)을 사용하여 적절한 버전을 선택합니다.
적절한 스키마가 표시되면 다음 항목과 호환되는 테이블 드롭다운을 사용하여 원하는 특정 OS로 테이블을 필터링할 수 있습니다. VMware Carbon Black Audit and Remediation에서 지원되지 않는 테이블은 이벤트 테이블뿐입니다.
carbon_black_info 테이블은 VMware Carbon Black Cloud Sensor로 설계되지 않았습니다. 이 표는 VMware Carbon Black EDR(이전의 Carbon Black Response) 센서를 위해 설계되었습니다.
osquery를 설치
과거에는 VMware Carbon Black 센서가 엔드포인트에 설치한 osquery 버전을 활용할 수 있었지만 이제는 보호 프로세스가 되었기 때문에 더 이상 그렇지 않습니다. Live Response 세션은 Windows에서는 SYSTEM, Linux에서는 root로 실행되지만 Live Response는 대화형 셸을 지원하지 않기 때문에 이전에는 활용할 수 있었습니다.
이러한 문제를 해결하기 위해 쿼리를 테스트하는 데 사용할 엔드포인트에 osquery를 설치합니다. 다운로드 페이지로 이동합니다(https://osquery.io/downloads/official), osquery Version에서 올바른 버전을 선택합니다.
드롭-다운을 누른 다음 적절한 OS를 선택하십시오. 설치 프로세스는 매우 간단하므로 여기서는 다루지 않습니다.
osquery가 설치되면 osqueryi에 액세스하여 대화형 셸을 열 수 있습니다. Linux 및 macOS에서는 이 바이너리가 경로에 있어야 하므로 다음을 실행할 수 있습니다.
$: sudo osqueryi
특정 데이터에 액세스하는 데 루트 권한이 필요한 테이블이 있기 때문에 osqueryi가 sudo를 사용하여 실행되고 있습니다.
윈도우즈의 경우 \Program Files\osquery에 설치되며 관리자 명령 프롬프트에서 다음을 입력하여 thinteractive 셸을 입력할 수 있습니다.
C:\Windows\system32>”\Program Files\osquery\osqueryi”
인터랙티브 쉘
셸에서 .help를 입력하여 도움말 메뉴에 액세스할 수 있습니다. SQLite가 아닌 모든 명령어 앞에는 마침표 또는 점이 붙으며 SQLite 명령어처럼 세미콜론이 붙지 않습니다. 다음은 여러분이 볼 수 있는 것의 예입니다.
이러한 모든 기능 중에서 다음과 같은 유용한 기능을 발견했습니다.
- .mode : 결과 집합이 줄바꿈되어 읽기 어려울 수 있는 열이 많을 때 유용합니다.
- .schema : 이 명령은 테이블에 있는 열을 기억하려고 할 때 유용합니다.
- .timer : 이 명령은 쿼리를 실행하는 데 걸린 시간을 출력하므로 쿼리를 테스트할 때 매우 유용합니다.
osquery 명령 기록
대화형 셸에서 위쪽 화살표를 눌러 입력한 이전 SQLite 명령을 검색할 수 있습니다.
Ctrl + R을 누르고 검색어를 입력하여 명령 기록을 검색할 수 있습니다. 현재 검색을 선택하고 실행하려면 Enter 키를 누르고 편집하려면 오른쪽 화살표를 누르고 검색에서 벗어나려면 Ctrl + G를 누릅니다.
탭 완성
원하는 문자를 충분히 입력한 탭을 눌러 테이블 이름을 완성할 수 있습니다. 열 이름을 탭으로 완성할 수 없습니다.
제한 사항
쿼리는 최대 메모리 사용량 500MB로 제한됩니다. 쿼리의 메모리 사용량이 500MB를 초과하면 쿼리가 종료됩니다.
결과 쿼리 페이로드의 최대 크기는 1MB로 제한됩니다. 1MB를 초과하는 쿼리 결과는 경고 없이 잘립니다.
사용자 인터페이스는 결과를 10,000개로 제한합니다. 전체 결과를 보려면 내보내기 버튼을 사용하거나 Live Query API를 사용하십시오. https://developer.carbonblack.com/reference/carbon-black-cloud/cb-liveops/latest/livequery-api/
900초 이상 걸리는 쿼리는 종료됩니다.
osquery 테이블
이 섹션에서는 일부 오스쿼리 테이블의 특성에 대해 설명합니다.
WHERE 절이 필요한 테이블
전체 목록은 아니지만 WHERE 절이 필요한 테이블 유형을 알 수 있습니다. WHERE 절 없이 테이블 중 하나를 실행하면 다음과 같은 오류가 발생합니다.
WHERE 절이 필요한 가장 일반적으로 사용되는 테이블은 다음과 같습니다.
- 레지스트리(키 또는 경로)
- 해시(경로)
- 파일(경로)
- yara(경로 및 sig_group, sigfile, sigrule 또는 sigurl 중 하나)
- windows_eventlog(채널)
레지스트리
표준 레지스트리 하이브의 모든 값은 HKEY_CURRENT_USER를 제외하고 쿼리할 수 있습니다. 위에서 설명한 것처럼 이 쿼리를 실행하는 데 필요한 WHERE 절이 있습니다. 대신 HKEY_USERS를 쿼리하여 사용자 정보를 얻을 수 있습니다. 이 하이브를 쿼리할 때 쿼리에서 사용자의 SID를 제공하거나 모든 사용자에 대해 와일드카드로 대체해야 합니다.
select * from registry where path = ‘HKEY_USERS\ S-1-5-21-773217070-3718577480-650418937-1001\Software\7-Zip’;
select * from registry where path like 'HKEY_USERS\%\Software\7-Zip';
Augeas
이 테이블을 어떻게 발음하는지는 묻지 말아주세요. 하지만 꽤 강력한 테이블입니다. 이 테이블를 통해 Linux 및 macOS의 표준 구성 파일을 검색할 수 있습니다. 다음은 ssh_config 파일의 나란히 보기입니다.
A, B 및 C에서 볼 수 있는 키 값 쌍이 하나만 있는 경우 이러한 값이 표에 나와 있습니다. 동일한 이름의 키가 여러 개 있거나 키에 값이 여러 개 있는 경우 D와 같이 배열로 표시됩니다.
파일
이 테이블 및 다른 많은 테이블에는 유닉스 에폭(epoch) 시간으로 지정된 파일 타임스탬프가 있으며 사람이 읽을 수 있도록 변환해야 합니다. 이 변환에는 DATETIME() SQLite 함수를 사용합니다. 변환하지 않은 내용은 다음과 같습니다.
그리고
UTC 타임스탬프를 사용하려면 ‘localtime’을 생략하십시오.
Windows_eventlog
select * from windows_eventlog where channel = 'Security' and eventid = '4624'; channel = Security datetime = 2021-08-30T17:28:37.336922000Z task = 12544 level = 0 provider_name = Microsoft-Windows-Security-Auditing provider_guid = {54849625-5478-4994-A5BA-3E3B0328C30D} eventid = 4624 keywords = 0x8020000000000000 data = {"EventData":{"SubjectUserSid":"S-1-5-18","SubjectUserName":"MHRA6LITBK$","SubjectDomainName":"WORKGROUP","SubjectLogonId":"0x3e7","TargetUserSid":"S-1-5-18","TargetUserName":"SYSTEM","TargetDomainName":"NT AUTHORITY","TargetLogonId":"0x3e7","LogonType":"5","LogonProcessName":"Advapi ","AuthenticationPackageName":"Negotiate","WorkstationName":"-","LogonGuid":"{00000000-0000-0000-0000-000000000000}","TransmittedServices":"-","LmPackageName":"-","KeyLength":"0","ProcessId":"0x280","ProcessName":"C:\\Windows\\System32\\services.exe","IpAddress":"-","IpPort":"-","ImpersonationLevel":"%%1833","RestrictedAdminMode":"-","TargetOutboundUserName":"-","TargetOutboundDomainName":"-","VirtualAccount":"%%1843","TargetLinkedLogonId":"0x0","ElevatedToken":"%%1842"}} pid = 676 tid = 6500
이 테이블을 사용하려면 WHERE 절에서 채널 또는 xpath 열을 사용해야 합니다. 채널 열은 대소문자를 구분하며 로그 소스를 참조합니다(예: 다음과 같은 Windows Event Logs 중 하나).
- Application
- Security
- Setup
- System
일부 결과는 eventid와 같은 개별 열에 있지만 모든 로그 데이터는 data 열의 JSON 블럽(blob)에서 사용할 수 있습니다. JSON_EXTRACT() 함수를 사용하여 JSON 블롭의 데이터를 가져오거나 비교할 수 있습니다. 로그 데이터의 모양은 다음과 같습니다.
다음은 JSON_EXTRACT()를 사용하여 값을 표시하고 이를 사용하여 JSON blob의 특정 값을 비교하는 예입니다.
select datetime,eventid, json_extract(data,"$.EventData.SubjectUserName") as SubjectUserName, json_extract(data,'$.EventData.LogonType') as LogonType from windows_eventlog where channel = 'Security' and eventid = '4624' and json_extract(data,'$.EventData.LogonType') = '5'; datetime = 2021-08-30T17:28:37.336922000Z eventid = 4624 SubjectUserName = MHRA6LITBK$ LogonType = 5
Applications and Services Logs에서 볼 수 있는 다른 여러 유형의 Windows 이벤트 로그도 있습니다.
channel 값은 중앙 창에 표시되는 Log Name입니다. 위의 AirWatch와 아래의 Microsoft-Windows-GroupPolicy/Operational을 참조하십시오.
Event Viewer에 현재 사용자 정의 보기가 있는 경우 Custom View Properties 페이지의 XML 탭에서 데이터를 복사하여 쿼리에 직접 사용할 수 있습니다.
결과 쿼리는 다음과 같습니다.
쿼리 구성
이제 osquery에 대해 잘 이해했으므로 대화형 셸을 사용하여 자체 쿼리 구성을 시작할 수 있습니다. 셸을 사용하면 쿼리에 대한 즉각적인 피드백을 얻을 수 있으므로 보다 효율적으로 문제를 해결하고, 출력이 요구 사항을 충족하는지 확인하고, 쿼리가 실행되는 데 걸리는 시간을 확인할 수 있습니다.
대화형 쉘
셸의 사용은 이 항목의 이전 섹션을 참조하십시오.
열을 선택
단순 SELECT *을(를) 사용하여 주어진 표의 모든 열을 쉽게 반환할 수 있지만, 많은 표에서는 실용적이지 않습니다. 결과에서 원하는 열을 선택하고 VMware Carbon Black Audit and Remediation(A)에서 쿼리를 사용하면 해당 열이 UI(B) 및 필터링을 위한 facet(C)에 나타납니다.
열과 측면(facet) 알파벳 순으로 표시됩니다. 현재 이 동작을 변경할 수 있는 방법은 없습니다.
SQLite 자습서
SQLite에 대해 자세히 알아보기 위해 가장 좋아하는 리소스는 https://www.sqlitetutorial.net/ 웹 페이지입니다. SQLite를 처음 사용하는 경우 다음과 같은 문장과 기능에 중점을 두어야 합니다.
예제 쿼리
New Query 탭의 VMware Carbon Black Audit and Remediation UI에는 지속적으로 추가 및 개선되는 권장 쿼리가 있습니다.
이러한 쿼리를 실행할 수 있을 뿐만 아니라 사용자 고유의 필요에 따라 편집할 수도 있습니다. + (A)를 클릭하여 SQLite (B) 및 Edit SQL 링크를 표시합니다. 쿼리를 편집하고 실행하려면 이 링크를 클릭합니다.
Query Exchange(https://community.carbonblack.com/t5/Query-Exchange/idb-p/query_exchange)에서는 현재 최대 150개의 쿼리를 선택할 수 있습니다. 쿼리는 VMware 직원, 고객 또는 오픈 소스 커뮤니티가 공개하여 제공합니다.
요약과 추가 자료
- Leveling Up with osquery for Workloads: Identifying and Contextualizing Windows Logon Failures – Part 1
- Leveling Up with osquery for Workloads: Locating local administrator accounts (windows) – Part 2
- Leveling Up with osquery for Workloads: Identifying Bitlocker Misconfigurations At Scale
출처 : https://carbonblack.vmware.com/resource/best-practices-carbon-black-cloud-audit-and-remediation