
블루 팀을 위한 자동 BloodHound 그래프 업데이트 도구입니다. SIEM의 실시간 세션, 그룹 및 CVE 데이터를 통해 AD 공격 경로를 강화하여 지속적인 모니터링 및 경고를 가능하게 합니다.

BloodHound CE 7.0 릴리스부터 기본 데이터베이스가 Postgres로 전환되었습니다. 이 버전의 FalconHound는 여전히 Neo4j를 기본 데이터베이스로 사용합니다. 최신 BloodHound 버전과 함께 FalconHound를 계속 사용하려면 bloodhound.config.json 파일에 다음 줄을 추가하세요.```json "graph_driver": "neo4j",
BloodHound 팀은 최소 1년 동안 Neo4j를 계속 지원할 예정입니다. 이 기간 내에 대규모 API 개선이 있거나 FalconHound에 PGSQL 지원이 구현되기를 바랍니다.
---
FalconHound은 블루 팀 멀티 툴입니다. BloodHound의 기능을 보다 자동화된 방식으로 활용하고 강화할 수 있도록 설계되었습니다. SIEM 또는 기타 로그 집계 도구와 함께 사용하도록 설계되었습니다.
BloodHound의 까다로운 측면 중 하나는 특정 시점의 스냅샷이라는 점입니다. FalconHound에는 환경 그래프를 최신 상태로 유지하는 데 사용할 수 있는 기능이 포함되어 있습니다. 이를 통해 현재 환경을 실시간으로 확인할 수 있습니다. 이는 지속적으로 변화하는 환경에 특히 유용합니다.
BloodHound에서 수집하기 가장 어려운 관계 중 하나는 로컬 그룹 구성원 및 세션 정보입니다. 블루 팀원으로서 우리는 이 정보를 로그에서 쉽게 확인할 수 있습니다. FalconHound는 이 정보를 수집하여 그래프에 추가하고 BloodHound에서 사용할 수 있도록 하는 데 사용할 수 있습니다.
이는 FalconHound를 사용할 수 있는 한 가지 예시에 불과합니다. 로그나 보안 도구에 있는 모든 정보를 수집하여 BloodHound 그래프에 추가하는 데 사용할 수 있습니다.
또한 그래프를 사용하여 경보를 트리거하거나 강화 목록을 생성할 수 있습니다.
예를 들어, 사용자가 특정 그룹에 추가되면 FalconHound를 사용하여 그래프 데이터베이스에서 민감하거나 높은 권한의 그룹에 대한 최단 경로를 쿼리할 수 있습니다. 경로가 있으면 이를 SIEM에 기록하거나 경보를 트리거하는 데 사용할 수 있습니다.
FalconHound를 사용할 수 있는 다른 예시:
- 로그온 및 로그오프 이벤트를 기반으로 그래프에서 세션 추가, 제거 또는 타임아웃 처리.
- Sentinel 또는 MDE에서 인시던트가 발생한 경우 그래프에서 사용자 및 컴퓨터를 손상된 것으로 표시.
- CVE 정보와 공개 익스플로잇 사용 가능 여부를 그래프에 추가.
- 모든 종류의 Azure 활동.
- 사용자가 그룹에 추가되거나 새 역할을 가질 때 민감한 그룹에 대한 최단 경로 재계산.
- 새 사용자, 그룹 및 컴퓨터를 그래프에 추가.
- Sentinel 및 Splunk용 강화 목록 생성(예: Kerberoastable 사용자 또는 특정 엔터티 소유권을 가진 사용자).
가능성은 무궁무진합니다. 이슈 트래커에 더 많은 아이디어를 추가하거나 PR을 제출해 주세요.
개발 배경과 일부 사용 사례 예시를 자세히 설명하는 블로그 게시물은 [여기](https://medium.com/falconforce/falconhound-attack-path-management-for-blue-teams-42adedc9cae5?source=friends_link&sk=9f64b6b3028c5a2a6087d63b4fd2c82f)에서 확인할 수 있습니다.
색인:
- [지원되는 데이터 소스 및 대상](#supported-data-sources-and-targets)
- [설치](#installation)
- [사용법](#usage)
- [작업](#actions)
- [그래프 확장](#extensions-to-the-graph)
- [자격 증명 관리](#credential-management)
- [배포](#deployment)
- [라이선스](#license)
## 지원되는 데이터 소스 및 대상
FalconHound는 BloodHound와 함께 사용하도록 설계되었습니다. BloodHound를 대체하는 것이 아닙니다. BloodHound와 지원하는 모든 기타 데이터 플랫폼의 기능을 자동화된 방식으로 활용하도록 설계되었습니다.
현재 FalconHound는 다음 데이터 소스 및/또는 대상을 지원합니다:
- Azure Sentinel
- Azure Sentinel Watchlists
- Splunk
- Microsoft Defender for Endpoint
- Neo4j
- MS Graph API (초기 단계)
- CSV 파일
- Azure Data Explorer (ADX) - 베타
- LogScale
- BloodHound CE 및 BHE (초기 단계)
- MarkDown 파일
- Elastic (초기 단계)
향후 추가 데이터 소스 및 대상이 계획되어 있습니다.
현재 FalconHound는 BloodHound용 Neo4j 데이터베이스만 지원합니다. BH CE 및 BHE의 API 지원은 활발히 개발 중입니다.
---
## 설치
FalconHound는 Go로 작성되었으므로 설치가 필요 없습니다. 릴리스 섹션에서 바이너리를 다운로드하여 실행하기만 하면 됩니다.
Windows, Linux 및 MacOS용 컴파일된 바이너리가 제공됩니다. [릴리스](https://github.com/FalconForceTeam/FalconHound/releases) 섹션에서 찾을 수 있습니다.
실행하기 전에 구성 파일을 생성해야 합니다. 루트 폴더에서 예시 구성 파일을 찾을 수 있습니다. 모든 자격 증명을 생성하는 방법에 대한 지침은 [여기](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)에서 확인할 수 있습니다.
FalconHound를 실행하는 권장 방법은 예약된 작업 또는 cron 작업으로 실행하는 것입니다. 이렇게 하면 정기적으로 실행하여 그래프, 경보 및 강화 목록을 최신 상태로 유지할 수 있습니다.
### 요구 사항
- BloodHound, 또는 현재로서는 최소한 Neo4j 데이터베이스
- SIEM 또는 기타 로그 집계 도구. 현재 Azure Sentinel 및 Splunk가 지원됩니다.
- [필요한 권한](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)이 있는 각 엔드포인트에 대한 자격 증명
### 구성
FalconHound는 YAML 파일을 사용하여 구성됩니다. 루트 폴더에서 예시 구성 파일을 찾을 수 있습니다.
구성 파일의 각 섹션은 아래에 설명되어 있습니다.
---
## 사용법
#### 기본 실행
FalconHound를 실행하려면 바이너리를 실행하고 `-go` 매개변수를 추가하여 actions 폴더의 모든 쿼리를 실행하십시오.```bash
./falconhound -go
활성화된 모든 액션을 나열하려면 -actionlist 매개변수를 사용하세요. 이는 actions 폴더에 있는 설정 파일에서 활성화된 모든 액션을 나열합니다. -go 매개변수와 함께 사용해야 합니다.```bash
./falconhound -actionlist -go
### 선택한 액션 세트로 실행하기
선택한 액션 세트를 실행하려면 `-ids` 매개변수와 함께 하나 또는 쉼표로 구분된 여러 액션 ID를 사용하세요. 이렇게 하면 매개변수에 지정된 액션들이 실행되며, 테스트, 문제 해결 또는 특정하고 더 빈번한 업데이트가 필요할 때 매우 유용합니다. 이는 `-go` 매개변수와 함께 사용해야 합니다.```bash
./falconhound -ids action1,action2,action3 -go
기본적으로 FalconHound는 현재 디렉토리에서 설정 파일을 찾습니다. -config 플래그를 사용하여 설정 파일을 지정할 수도 있습니다. 이를 통해 서로 다른 환경에 대해 서로 다른 설정으로 FalconHound의 여러 인스턴스를 실행할 수 있습니다.```bash
./falconhound -go -config /path/to/config.yml
#### 다른 actions 폴더로 실행하기
기본적으로 FalconHound는 현재 디렉터리에서 actions 폴더를 찾습니다. `-actions-dir` 플래그를 사용하여 다른 폴더를 지정할 수도 있습니다. 이렇게 하면 테스트 및 문제 해결이 더 쉬워질 뿐만 아니라, 여러 FalconHound 인스턴스를 서로 다른 구성, 다른 환경, 또는 다른 시간 간격으로 실행할 수 있습니다.```bash
./falconhound -go -actions-dir /path/to/actions
기본적으로 FalconHound는 config.yml(또는 사용자 정의 로드된 파일)의 자격 증명을 사용합니다. -keyvault 플래그를 설정하면 FalconHound는 config에서 keyvault를 가져와 해당 위치에서 모든 비밀을 검색합니다. keyvault에 항목이 누락된 경우 config 파일로 대체됩니다. 관리 ID를 사용하여 azure keyvault에서 비밀을 가져오려면 authtype 변수를 msi로 정의하십시오.```bash
./falconhound -go -keyvault
## 액션
액션은 FalconHound의 핵심입니다. FalconHound가 실행할 쿼리입니다. 소스 및 대상의 기본 언어로 작성되며 actions 폴더에 저장됩니다. 각 액션은 별도의 파일이며, 정보의 소스인 쿼리 대상 디렉터리에 저장됩니다. 파일 이름이 액션의 이름으로 사용됩니다.
### 액션 폴더 구조
액션 폴더는 쿼리 소스별로 하위 디렉터리로 나뉩니다. 모든 폴더는 재귀적으로 처리되며 모든 YAML 파일은 알파벳 순서로 실행됩니다.
Neo4j 액션은 **마지막에** 처리되어야 합니다. 그 출력이 다른 데이터 소스가 먼저 그래프 데이터베이스를 업데이트하여 최신 결과를 얻는 데 의존하기 때문입니다.
### 액션 파일
모든 파일은 YAML 파일입니다. YAML 파일에는 쿼리, 일부 메타데이터 및 쿼리 정보의 대상이 포함됩니다.
루트 폴더에 템플릿 파일이 있습니다. 이를 사용하여 자신만의 액션을 만들 수 있습니다. 자세한 예제는 actions 폴더의 액션을 참조하십시오.
대부분의 항목은 상당히 명확하겠지만, 액션에 대해 주목해야 할 몇 가지 중요한 사항이 있습니다:
#### 활성화
이름에서 알 수 있듯이 액션을 활성화하거나 비활성화하는 데 사용됩니다. false로 설정되면 액션이 실행되지 않습니다.```yaml
Enabled: true
디버그 모드를 활성화하거나 비활성화하는 데 사용됩니다. true로 설정하면 작업이 디버그 모드로 실행됩니다. 쿼리 결과가 콘솔에 출력됩니다. 테스트 및 문제 해결에 유용하지만 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 결과 수에 따라 작업 처리 속도가 느려질 수 있습니다.```yaml Debug: false
#### Query
`Query` 필드는 소스에 대해 실행될 쿼리입니다. `SourcePlatform`에 따라 KQL 쿼리, SPL 쿼리 또는 Cypher 쿼리가 될 수 있습니다.
중요: 가능한 한 쿼리를 정확하게 유지하고 필요한 필드만 반환하도록 하세요. 이렇게 하면 결과 처리 속도와 효율성이 향상됩니다.
또한 Cypher 쿼리를 실행할 때는 결과로 JSON 객체를 RETURN해야 합니다. 그렇지 않으면 처리가 실패합니다.
예를 들어, 다음은 Azure Subscriptions의 Name, Count, Role 및 Owners를 반환합니다:```cypher
MATCH p = (n)-[r:AZOwns|AZUserAccessAdministrator]->(g:AZSubscription)
RETURN {Name:g.name , Count:COUNT(g.name), Role:type(r), Owners:COLLECT(n.name)}
각 대상에는 구성할 수 있는 여러 옵션이 있습니다. 대상에 따라 일부는 다른 대상보다 더 많은 구성이 필요할 수 있습니다.
모든 대상에는 Name 및 Enabled 필드가 있습니다. Name 필드는 대상을 식별하는 데 사용됩니다. Enabled 필드는 대상을 활성화 또는 비활성화하는 데 사용됩니다. 이것이 false로 설정되면 대상이 무시됩니다.
CSV는 {{date}} 변수를 지원하며, 현재 날짜로 대체됩니다. 형식은 YYYY-MM-DD입니다. 이를 사용하여 일일 보고서를 생성할 수 있습니다.
이는 폴더나 파일 이름(예: path/to/filename-{{date}}.csv) 또는 폴더 이름 자체에 사용될 수 있습니다.```yaml
#### Markdown
Markdown은 {{date}} 변수를 지원하며, 이 변수는 `YYYY-MM-DD` 형식의 현재 날짜로 대체됩니다. 이는 일일 보고서를 작성하는 데 사용할 수 있습니다.
이는 폴더나 파일 이름(예: `path/to/filename-{{date}}.md`) 또는 폴더 이름 자체에 사용할 수 있습니다.```yaml
- Name: Markdown
Enabled: true
Path: path/to/filename.md
예시 출력:```markdown
Description: Get a list of Domain Admins. Date: 2024-02-19
| Name | ObjectID |
|---|---|
| [email protected] | S-1-5-21-1122334455-112233445-1112223334-11223344 |
#### Neo4j