
BRAWL 자동화 적대자 모의 훈련 데이터
사이버 보안 연구자들이 탐지 및 대응 능력을 개발할 때 직면하는 어려운 문제 중 하나는 가설과 능력을 테스트할 현실적인 환경을 찾는 것입니다.
가장 저렴한 방법은 소규모 연구실 네트워크에서 능력을 테스트하는 것입니다. 하지만 이 환경은 실제 기업 네트워크의 규모와 탐지를 훨씬 더 어렵게 만드는 실제 환경의 노이즈가 부족합니다. 여러 가지 면에서, 최적의 환경은 통제된 현실적인 공격자와 사용자, 시스템 관리자, 타사 소프트웨어/장치로 인한 실제 노이즈가 있는 여러 기업 규모의 네트워크에서 테스트하는 것입니다. 이 환경에서 테스트할 때의 문제는 비용이 많이 들고 일부 시나리오에서는 위험이 높다는 점입니다.
BRAWL은 클라우드 환경 내에서 자동으로 기업 네트워크를 생성하는 시스템을 만들어 절충안을 모색합니다. OpenStack이 현재 유일하게 지원되는 환경이지만, 향후 다른 클라우드 환경도 쉽게 지원할 수 있도록 설계되고 있습니다. BRAWL은 또한 LogStash와 Kafka를 사용한 데이터 수집 및 처리 파이프라인이 포함된 분석 네트워크를 구축합니다. 분석 네트워크의 일부로 Elasticsearch와 Kibana를 사용한 이벤트 저장 및 검색 시스템을 만듭니다. BRAWL은 Windows 이미지를 사용하여 기업 네트워크 "Game Board"를 가동합니다. 이 이미지에는 Microsoft Sysmon 및 기타 센서가 이미 설치 및 구성되어 있어 데이터 수집 프레임워크로 로그를 전달합니다.
BRAWL은 또한 봇(bot) 개념을 가지고 있으며, 이는 Red, Blue 또는 Gray일 수 있습니다. Red 봇은 공격적이고, Blue 봇은 방어적이며, Gray 봇은 탐지를 더 어렵게 만들기 위해 노이즈를 제공하기 위해 합법적인 사용자 행동을 에뮬레이션합니다. 사용자가 연구 가설을 테스트하려면 BRAWL 봇을 구현합니다. BRAWL 봇은 BRAWL 컨트롤러에 등록하고, 컨트롤러는 Game Board에서 BRAWL 봇 간의 게임을 조정합니다.
참고: 파일 크기와 GitHub 할당량 문제로 인해 모든 파일을 일반 텍스트로 git 저장소에 남겨 두는 대신 zip 파일로 배치합니다. 모든 데이터는 파일에 있습니다.
이 릴리스는 BRAWL 프로토타입의 일부 데이터로 구성됩니다. 아래에 설명된 대로 소규모 기업 네트워크를 만들었습니다. 그런 다음 MITRE CALDERA 연구 프로젝트를 Red 봇으로 사용하여 단일 게임을 실행했습니다.
CALDERA는 Adversarial Tactics, Techniques, and Common Knowledge (ATT&CK) 모델의 정보를 기반으로 적 에뮬레이션 활동을 자동화하는 관련 MITRE 연구 프로젝트입니다. 이는 ATT&CK 전술 및 기술 세트를 구현하고 계획 시스템(https://dl.acm.org/citation.cfm?id=2991111)을 사용하여 해당 기술의 실행을 자동화하고 기업 네트워크 내에서 사후 침해 적 행동을 생성합니다.
이 데이터는 Creative Commons BY License에 따라 릴리스됩니다.
우리의 소규모 기업 네트워크는 도메인 컨트롤러(dc.brawlco.com)와 16개의 워크스테이션으로 구성된 플랫 네트워크입니다. 각 PC는 PC 이름에 기본 사용자의 이름이 있습니다(예: 사용자 beane은 일반적으로 beane-pc에 로그인함). 해당 사용자는 컴퓨터에 대한 로컬 관리자 권한을 가지고 있습니다.
모든 PC는 Windows 8.1을 실행합니다. 도메인 컨트롤러는 Windows Server 2012 R2를 실행합니다.
Windows 8 PC에서 다음 레지스트리 명령을 사용하여 WDigest가 LSASS 메모리에 일반 텍스트 비밀번호를 유지하도록 변경했습니다: reg ADD HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1 /F
이 실습에서 CALDERA는 유일한 BRAWL 봇이었습니다. 개념적으로 BRAWL은 다양한 공격자 행동과 탐지를 테스트하는 데 사용될 수 있지만, MITRE의 많은 연구 노력은 '침해 가정(assume breach)' 철학을 따릅니다. 따라서 우리는 실습 시작 시 CALDERA에게 네트워크 상의 한 상자에 로컬 관리자로서의 시작점을 제공합니다.
또한 Gray 봇이 다른 호스트에 로그온을 수행하지 않으면 BRAWL Game Board는 Red 봇이 도난 및 사용할 수 있는 자격 증명 측면에서 무균 상태입니다. 측면 이동을 활성화하기 위해 BRAWL 컨트롤러는 psexec를 사용하여 네트워크의 다른 사용자 자격 증명으로 호스트에 로그온 이벤트를 생성합니다.
CALDERA는 실습 중에 다음 ATT&CK 기술을 수행했습니다:
이 저장소에는 다섯 가지 유형의 데이터가 있습니다. 각각은 data/ 폴더에 별도의 파일로 포함되어 있습니다.
Red 봇과 Blue 봇은 BRAWL 공유 형식(BSF)으로 활동 또는 탐지에 대한 정보를 기록하는 것이 권장됩니다. 이는 Blue 봇의 탐지/작업과 Red 봇의 작업을 더 쉽게 비교할 수 있도록 하기 위함입니다.
형식은 현재 개발 중이며 향후 데이터 세트에서 변경될 수 있습니다.
BSF의 필드는 아래 데이터 소스 세부 정보 섹션에 설명되어 있습니다.
BRAWL의 다른 이벤트 소스는 시간을 다르게 처리합니다. 시간은 이벤트가 로깅 수집 프레임워크에 도달한 시간, 호스트/엔드포인트에서 이벤트가 생성된 시간, 또는 네트워크의 봇이 기록한 시간입니다. 일반적으로 이러한 시간은 서로 수 밀리초 이내여야 합니다. 가능한 경우 로깅 수집 프레임워크는 수집 노드에 도달하는 시간 대신 이벤트에 저장된 이벤트 시간을 사용합니다. 아래 표는 각 데이터 유형에 사용된 방법을 자세히 설명합니다.
Sysmon v3.11을 사용하고 있습니다. sysmon_config.txt에는 구성을 자세히 설명하는 sysmon -c 명령의 출력이 포함되어 있습니다.
Sysmon은 다양한 종류의 이벤트를 생성하며, 이는 서로 다른 CAR 객체/작업 쌍에 매핑됩니다. 각 유형의 필드는 CAR 웹사이트에서 더 자세히 설명됩니다: https://car.mitre.org/wiki/Data_Model
구성에서 Sysmon에 의해 생성되는 객체/작업 쌍은 다음과 같습니다:
driver/loadfile/attr_modifyflow/startmodule/loadprocess/createprocess/terminatethread/createthreat/remote_createCAR 데이터 모델을 사용하여 위의 각 객체/작업 쌍에 대한 data_model.fields.*에 포함된 필드 이름과 의미를 확인하세요.
이 데이터는 MITRE의 PowerShell Utilities for Security Situational Awareness에서 unified_json.ps1 모듈을 사용하여 주기적으로 수집되었습니다. userinfo 필드는 Mimikatz와 같은 자격 증명 덤퍼가 시스템에서 실행된 경우 어떤 자격 증명이 손상되었을 수 있는지 확인하는 데 유용할 수 있습니다.
bsf 배열 필드 내부의 객체는 operation, step 또는 event 유형입니다. 모든 객체에는 객체 유형을 결정하는 데 사용할 수 있는 nodetype 필드가 있습니다.
event BSF 객체CAR 데이터 모델에서 관련 객체를 찾아 필수 및 선택적 필드의 의미에 대해 자세히 알아볼 수 있습니다.
step BSF 객체Step 객체는 하나 이상의 이벤트를 더 높은 수준의 활동 그룹으로 연결합니다. 또한 step 객체는 BSF 생성자가 활동에 ATT&CK 레이블을 지정할 수 있는 위치를 제공합니다.
operation BSF 객체Operation 객체는 여러 step 객체를 함께 연결합니다. 그러나 이 데이터 세트에는 Operation 객체가 없습니다.
이벤트 필드에 대한 설명 및 참고 사항(특히 "다음 중 하나 이상"):1. 시간 필드.
event 객체와 함께 보고되어야 합니다. 다른 필드는 선택 사항이지만, 알려진 대로 보고되어야 합니다. 특히, 봇은 정확한 시간을 모르더라도 최선의 추정치인 "time" 값을 보고하는 것이 권장됩니다.command_line 또는 실행된 exe / image_path를 제공할 수 있습니다.이 게임을 위한 BRAWL 네트워크의 호스트:
| 데이터 유형 |
|---|
| 설명 |
|---|
| game_metadata | BRAWL 시나리오를 설명하는 데이터 |
| sysmon | 각 워크스테이션에서 실행 중인 Sysmon에서 수집된 데이터 |
| win_event | Windows 이벤트 로그 |
| computer_properties | 네트워크 내 컴퓨터에 대한 일부 정보를 제공하는 사용자 정의 스크립트에서 수집된 데이터 |
| bsf | BRAWL 공유 형식(BSF)의 Red 봇 작업 |
| 데이터 소스 | 시간 참고 사항 |
|---|
| computer_properties | time 필드에서 가져옴 |
| game_metadata | 수집 프레임워크에 도달한 시간 |
| sysmon | utc_time 필드에서 가져옴 |
| win_event | Windows 이벤트 시간에서 가져옴 |
| bsf | @timestamp 필드는 수집 프레임워크에 도달한 시간입니다. 그러나 시간 관련 BSF 필드(예: happened_after,happened_before 등)는 CALDERA의 명령 및 제어 서버 시간을 기준으로 이벤트가 시작되거나 종료된 시간입니다. |
| 필드 이름 | 설명 |
|---|
| @timestamp | 이벤트와 관련된 시간. 위의 시간 참고 사항을 참조하세요. |
| @uuid | 고유 이벤트 ID |
| game_id | 이 실습의 고유 게임 ID. |
| type | 이벤트 유형. 이러한 레코드의 경우 항상 game_metadata |
| hosts | 실습에 참여했으며 Red 봇이 '경계 내'에 있는 호스트 목록 |
| randomization_seed | BRAWL 봇 참가자가 BRAWL 실행 전반에 걸쳐 동일한 '무작위' 행동을 구현하는 데 사용할 수 있는 시드 |
| starting_host | Red 봇이 시작하는 호스트 |
| 필드 이름 | 설명 |
|---|
| @timestamp | 이벤트와 관련된 시간. 위의 시간 참고 사항을 참조하세요. |
| @uuid | 고유 이벤트 ID |
| type | 이벤트 유형. 이러한 레코드의 경우 항상 sysmon |
| game_id | 이 실습의 고유 게임 ID. |
| data_model.object | 작업이 수행되는 CAR 객체. |
| data_model.action | 객체에 대해 수행되는 CAR 작업. 이 필드는 배열입니다. 일부 이벤트는 CAR 데이터 모델에서 두 개 이상의 작업에 해당할 수 있기 때문입니다. 원격 스레드 생성 이벤트가 그 예입니다. |
| data_model.fields.* | 주어진 객체/작업 쌍에 관련된 필드. |
| game_id | 이 실습의 고유 게임 ID. |
| host | 이벤트가 기록된 호스트 이름. |
| 필드 이름 | 설명 |
|---|
| @timestamp | 이벤트와 관련된 시간. 계산 방법에 대한 자세한 내용은 아래 각 이벤트를 참조하세요. |
| @uuid | 고유 이벤트 ID |
| type | 이벤트 유형. 이러한 레코드의 경우 항상 win_event |
| game_id | 이 실습의 고유 게임 ID. |
| host | 이벤트를 기록한 호스트 |
| raw | 원시 XML 형식의 Windows 이벤트 로그 항목 |
| data_model.fields.log_name | Windows 로그 이름(Application, System 또는 Security) |
| data_model.fields.log_type | 주어진 log_name에 대한 로그 유형 |
| 필드 이름 | 설명 |
|---|
| @timestamp | 이벤트와 관련된 시간. 위의 시간 참고 사항을 참조하세요. |
| @uuid | 고유 이벤트 ID |
| type | 이벤트 유형. 이러한 레코드의 경우 항상 computer_properties |
| game_id | 이 실습의 고유 게임 ID. |
| host | 스크립트가 실행된 컴퓨터 이름 |
| netinfo | netinfo 객체의 컬렉션 |
| netinfo.DNSServers | 이 호스트에 대해 구성된 DNS 확인자의 컬렉션 |
| netinfo.Gateway | 이 인터페이스의 게이트웨이 |
| netinfo.IPAddress | 이 인터페이스의 IP 주소 |
| netinfo.IsDHCPEnabled | DHCP가 활성화되었습니까? |
| netinfo.MACAddress | 이 인터페이스의 MAC 주소 |
| netinfo.SubnetMask | 각 IP 주소의 서브넷 마스크 |
| pcinfo | PC에 대한 정보를 설명하는 객체 |
| pcinfo.AssetTag | 액세스 가능한 경우 자산 태그 |
| pcinfo.CPU | CPU에 대한 정보 |
| pcinfo.ChassisType | BRAWL에서 사용되지 않음. "Unknown" |
| pcinfo.Disks | 연결된 디스크에 대한 정보 |
| pcinfo.DomainName | 시스템이 속한 도메인 |
| pcinfo.LastBootUpTime | 시스템이 부팅된 시간 |
| pcinfo.Memory | 시스템의 메모리에 대한 정보 |
| pcinfo.OS | 실행 중인 OS에 대한 정보 |
| pcinfo.SerialNumber | 하드웨어 일련 번호 |
| time | 스크립트가 실행된 시간 |
| userinfo | 마지막 부팅 이후 시스템에 로그온한 사용자를 설명하는 userinfo 객체를 포함하는 배열 |
| userinfo.AuthenticationPackage | 인증에 사용된 인증 패키지 |
| userinfo.Domain | 계정이 속한 도메인(또는 로컬 PC) |
| userinfo.LogonId | 로그온 ID |
| userinfo.LogonTime | 로그온 시간 |
| userinfo.LogonType | Windows 로그온 유형 상수 |
| userinfo.LogonTypeName | LogonType에 대한 설명 |
| userinfo.UserName | 로그온하는 주체의 사용자 이름 |
| 필드 이름 | 설명 |
|---|
| @timestamp | 이벤트와 관련된 시간. 위의 시간 참고 사항을 참조하세요. |
| @uuid | 고유 이벤트 ID |
| type | 이벤트 유형. 이러한 레코드의 경우 항상 bsf_events |
| game_id | 이 실습의 고유 게임 ID. |
| bsf | 봇 활동을 설명하는 BSF 이벤트의 배열. 이 배열의 필드는 아래에서 더 자세히 설명됩니다. |
| bsf_version | bsf 이벤트 배열에 사용된 BSF 스키마 버전 |
| producer_id | 이 BSF 데이터를 생성한 봇. |
| 필드 | 설명 |
|---|
| id | 각 이벤트의 고유 식별자. |
| nodetype | 이 노드의 유형. {"operation", "step", "event"} 중 하나. |
| host | 이 이벤트가 실행/탐지된 호스트 이름 또는 IP. |
| time | 참고: 다음 세 가지 시간 필드(즉, "time", "happened_after" 또는 "happened_before") 중 하나 이상을 보고해야 합니다. "time"이 특히 바람직하며, 모두 권장됩니다. 아래 일반 참고 사항의 참고 1을 참조하세요. 시간 형식에 대한 참고: 모든 시간 정보는 ISO 8601 형식이어야 합니다. 보다 구체적으로: 'yyyy-mm-ddThh:nn:ss.llll00'. 여기서 y는 연도, m은 월, d는 일, h는 시, n은 분, s는 초, l은 밀리초(뒤에 두 개의 0이 옴)입니다. 예: 2017-02-22T18:38:14.060000 선택 사항: 이 이벤트가 발생한 시간의 추정치. |
| happened_after | 선택 사항: "time"의 불확실성에 대한 하한("시간적 왼쪽 괄호"). |
| happened_before | 선택 사항: "time"의 불확실성에 대한 상한("시간적 오른쪽 괄호"). |
| confidence | 선택 사항: Blue 봇이 이 이벤트의 공격 연관성에 대한 신뢰도(0.0에서 1.0 사이의 실수)를 전달할 수 있도록 합니다. |
| object | 작업이 수행된 객체. 허용 가능한 값은 아래 표를 참조하세요. CAR 데이터 모델을 기반으로 합니다. |
| action | 주어진 객체에 대한 작업. CAR 데이터 모델을 기반으로 합니다. |
| specific_field_1 .. N | 1-N개의 설명 속성(아래 참조). CAR 데이터 모델을 기반으로 합니다. |
| 객체 | 작업 | 필수 필드 | 선택적 필드 |
|---|
| process | create terminate scanned | 다음 중 하나 이상: {pid, command_line, exe, image_path} | fqdn hostname md5_hash parent_exe parent_image_path ppid sha1_hash sha256_hash sid signer user |
| flow | start end message | 다음 중 하나 이상: {src_hostname,src_ip} 다음 중 하나 이상: {dest_hostname, dest_ip} 다음 중 하나 이상: {src_port, dest_port, protocol} | content dest_fqdn exe flags fqdn hostname image_path packet_count pid ppid proto_info src_fqdn user |
| file | create delete modify read timestomp write | file_path | company file_name fqdn hostname image_path md5_hash pid ppid sha1_hash sha256_hash signer user |
| 필드 이름 | 설명 |
|---|
| id | 작업 단계의 고유 식별자. |
| nodetype | 이 노드의 유형. {"operation", "step", "event"} 중 하나. |
| attack_info | 이 단계가 ATT&CK 분류와 어떻게 관련되는지 설명하는 기술 객체(아래 표에 정의됨)의 배열. 왜 배열인가? 단일 기술이 종종 단계와 모든 이벤트를 설명하지만, 경우에 따라 여러 기술이 구현될 수 있습니다. |
| attack_info.technique_id | 이 단계와 참조된 이벤트에서 Red가 사용한 공격 메커니즘을 설명하는 ATT&CK 기술 ID(예: "T1059"). |
| attack_info.technique_name | 이 기술을 설명하는 사람이 읽을 수 있는 문자열(예: "Command-Line Interface"). |
| attack_info.tactic | 이 기술의 의도/전략을 설명하는 하나 이상의 ATT&CK 전술 레이블 배열. (단일 기술이 여러 전술을 실행할 수 있습니다.) 예: ["Lateral Movement", "Execution"] |
| description | 선택 사항: 이 단계에 대한 메모 또는 주석이 여기에 들어갑니다. |
| events | 이 단계를 구성하는 event 객체의 ID 배열. |