Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SilkETW — ETW용 C# 래퍼로서 커널 및 사용자 모드 이벤트 데이터를 JSON으로 직렬화하여 위협 헌팅, 악성코드 분석, 침해 대응에 사용되며, Yara 통합 및 Elasticsearch 전송 기능을 제공합니다. | Kitploit
도구/GitHubGitHub/mandiant/silketw
Defensive ToolsMemory ForensicsForensicsMalware AnalysisDigital ForensicsThreat IntelligenceIntrusion DetectionLearning & EducationIncident ResponseAnomaly DetectionLog AnalysisArchived
85213963년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
mandiant/silketw

SilkETW

ETW용 C# 래퍼로서 커널 및 사용자 모드 이벤트 데이터를 JSON으로 직렬화하여 위협 헌팅, 악성코드 분석, 침해 대응에 사용되며, Yara 통합 및 Elasticsearch 전송 기능을 제공합니다.

저장소 보기

SilkETW 및 SilkService

SilkETW 및 SilkService는 ETW를 위한 유연한 C# 래퍼로, ETW의 복잡성을 추상화하고 연구 및 내부 조사를 수행할 수 있는 간단한 인터페이스를 제공하기 위한 것입니다. 두 프로젝트 모두 명백한 방어적(및 공격적) 응용 분야가 있지만, 주로 연구 도구로 간주되어야 합니다.

쉬운 소비를 위해 출력 데이터는 JSON으로 직렬화됩니다. JSON 데이터는 파일에 기록되어 PowerShell을 사용하여 로컬에서 분석하거나, Windows 이벤트 로그에 저장하거나, Elasticsearch와 같은 타사 인프라로 전송할 수 있습니다.

SilkETW 및 SilkService의 미래에 대한 자세한 내용은 로드맵 섹션을 참조하십시오.

미디어

SilkETW 및 SilkService에 대한 더 많은 배경 정보는 다음 자료를 참조하십시오.

  • SilkETW: 무료 원격 측정은... 무료입니다! - 여기
  • SilkETW 및 SilkService BlackHat Arsenal 2019 - 여기
  • ETW 이벤트 및 HELK를 사용한 위협 사냥 — 1부: SilkETW 설치 (@Cyb3rWard0g 작성) - 여기
  • ETW 이벤트 및 HELK를 사용한 위협 사냥 — 2부: ETW 이벤트를 HELK로 전송 (@Cyb3rWard0g 작성) - 여기
  • Windows 10 버전 전체의 모든 매니페스트 기반 및 MOF 기반 ETW 공급자의 이벤트 (@jdu2600 작성) - 여기
  • SilkETW 및 Yara를 사용한 의심스러운 LDAP 활동 사냥 - 여기

구현 세부 정보

라이브러리

SilkETW는 .Net v4.5 기반으로 제작되었으며 아래와 같이 여러 타사 라이브러리를 사용합니다. 자세한 내용은 LICENSE-3RD-PARTY를 참조하십시오.

root@kitploit:~
ModuleId                                 Version LicenseUrl                                                   
--------                                 ------- ----------                                                   
McMaster.Extensions.CommandLineUtils     2.3.2   https://licenses.nuget.org/Apache-2.0                        
Microsoft.Diagnostics.Tracing.TraceEvent 2.0.36  https://github.com/Microsoft/perfview/blob/master/LICENSE.TXT
Newtonsoft.Json                          12.0.1  https://licenses.nuget.org/MIT                               
System.ValueTuple                        4.4.0   https://github.com/dotnet/corefx/blob/master/LICENSE.TXT     
YaraSharp                                1.3.1   https://github.com/stellarbear/YaraSharp/blob/master/LICENSE

SilkETW

명령줄 옵션

명령줄 사용법은 매우 간단하며 사용자 입력은 실행 프롤로그에서 검증됩니다. 자세한 내용은 아래 이미지를 참조하십시오.

도움말

SilkService

주의 사항

SilkService는 많은 사람들이 SilkETW를 헤드리스로 실행하고 여러 소스에 대해 동시에 ETW 수집을 수행하기를 원했기 때문에 만들어졌습니다. 여기에는 분명한 매력이 있지만, 다음 사항을 염두에 두어야 합니다.

  • SilkETW 및 SilkService는 한 명의 엔지니어 군대(@FuzzySec)에 의해 만들어졌으며, 개발자 부서의 지원을 받지 않으므로 버그가 포함될 수 있습니다. 버그를 발견하거나 이 프로젝트를 개선할 방법을 찾으면 티켓을 제출하거나 풀 리퀘스트를 제출하는 것이 좋습니다.
  • ETW 수집은 리소스를 많이 사용할 수 있습니다. 철저한 성능 테스트 없이 SilkService를 광범위한 호스트에 배포하지 마십시오. 가장 성능이 낮은 머신에서도 구성이 안정적으로 실행될 수 있는지 확인하십시오.

설정

릴리스 패키지를 컴파일하거나 다운로드한 후, 관리자 프롬프트에서 다음 명령을 실행하여 서비스를 설치할 수 있습니다.

root@kitploit:~
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand

구성

SilkService는 XML 구성 파일인 "SilkServiceConfig.xml"을 사용하며, 이 파일은 서비스 바이너리와 동일한 디렉터리에 있어야 합니다. 아래 예제 구성 파일을 볼 수 있습니다.

root@kitploit:~
<SilkServiceConfig>
	<!--
		This is a user collector
		-> Microsoft-Windows-DotNETRuntime
		-> GUID or string based name
	-->
	<ETWCollector>
		<Guid>45c82358-c52d-4892-8237-ba001d396fb4</Guid>
		<CollectorType>user</CollectorType>
		<ProviderName>e13c0d23-ccbc-4e12-931b-d9cc2eee27e4</ProviderName>
		<UserKeywords>0x2038</UserKeywords>
		<OutputType>url</OutputType>
		<Path>https://some.elk:9200/NetETW/_doc/</Path>
	</ETWCollector>
	<!--
		This is a user collector
	-->
	<ETWCollector>
		<Guid>6720babc-dedc-4906-86b9-d0bc0089ec50</Guid>
		<CollectorType>user</CollectorType>
		<ProviderName>Microsoft-Windows-DNS-Client</ProviderName>
		<OutputType>eventlog</OutputType>
		<YaraScan>C:\Some\Path\RuleFolder</YaraScan>
		<YaraOptions>Matches</YaraOptions>
	</ETWCollector>
	<!--
		This is a kernel collector
	-->
	<ETWCollector>
		<Guid>21ac2393-3bbb-4702-a01c-b593e21913dc</Guid>
		<CollectorType>kernel</CollectorType>
		<KernelKeywords>Process</KernelKeywords>
		<OutputType>file</OutputType>
		<Path>C:\Users\b33f\Desktop\kproc.json</Path>
	</ETWCollector>
</SilkServiceConfig>

각 ETWCollector 요소에는 임의의 GUID가 있어야 하며, 이는 내부 추적 및 로깅 목적으로 사용됩니다. 다음 명령을 사용하여 PowerShell에서 GUID를 생성할 수 있습니다.

root@kitploit:~
PS C:\> [guid]::NewGuid()

Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa

감사

런타임 시 SilkService는 서비스 런타임 정보를 기록하기 위해 "Logs" 하위 폴더를 생성합니다. 이는 서비스 상태를 확인하고, 서비스 매개변수 유효성 검사를 확인하며, 오류 정보를 검토하는 데 매우 유용한 리소스입니다. SilkService는 엄격하게 종료가 필요하지 않은 오류라도 모든 종류의 오류가 발생하면 정상적으로 종료되는 것을 선호합니다. 이 설계 결정은 방치된 수집기나 부분적인 작동 가능성이 좋은 전략이 아니기 때문에 의도적으로 이루어졌습니다.

서비스가 스스로 종료되면 항상 서비스 로그를 확인하십시오!

문제가 발생했나요?

무언가 잘못될 가능성은 항상 있습니다. 자세한 내용은 서비스 로그를 확인하십시오. SilkService는 ETW 수집기를 종료하고 정리하도록 구성되어 있지만, 프로세스 종료 후 오래된 수집기가 계속 등록되어 있을 수 있습니다. 실행 중인 수집기를 나열하려면 다음 명령을 사용할 수 있습니다.

root@kitploit:~
logman -ets

오래된 수집기가 확인되면 관리자 프롬프트에서 다음 명령을 실행하여 제거할 수 있습니다.

root@kitploit:~
Get-EtwTraceProvider |Where-Object {$.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider

출력 형식

JSON 출력 구조

JSON 출력은 직렬화 전에 다음 C# 구조체에 따라 형식이 지정됩니다.

root@kitploit:~
public struct EventRecordStruct
{
    public Guid ProviderGuid;
    public List<String> YaraMatch;
    public string ProviderName;
    public string EventName;
    public TraceEventOpcode Opcode;
    public string OpcodeName;
    public DateTime TimeStamp;
    public int ThreadID;
    public int ProcessID;
    public string ProcessName;
    public int PointerSize;
    public int EventDataLength;
    public Hashtable XmlEventData;
}

공급자 및 이벤트 유형에 따라 XmlEventData 해시 테이블에 가변 데이터가 있음을 유의하십시오. "Microsoft-Windows-Kernel-Process" -> "ThreadStop/Stop"에 대한 샘플 JSON 출력은 아래와 같습니다.

root@kitploit:~
{
   "ProviderGuid":"22fb2cd6-0e7b-422b-a0c7-2fad1fd0e716",
   "YaraMatch":[

   ],
   "ProviderName":"Microsoft-Windows-Kernel-Process",
   "EventName":"ThreadStop/Stop",
   "Opcode":2,
   "OpcodeName":"Stop",
   "TimeStamp":"2019-03-03T17:58:14.2862348+00:00",
   "ThreadID":11996,
   "ProcessID":8416,
   "ProcessName":"N/A",
   "PointerSize":8,
   "EventDataLength":76,
   "XmlEventData":{
      "FormattedMessage":"Thread 11,996 (in Process 8,416) stopped. ",
      "StartAddr":"0x7fffe299a110",
      "ThreadID":"11,996",
      "UserStackLimit":"0x3d632000",
      "StackLimit":"0xfffff38632d39000",
      "MSec":"560.5709",
      "TebBase":"0x91c000",
      "CycleTime":"4,266,270",
      "ProcessID":"8,416",
      "PID":"8416",
      "StackBase":"0xfffff38632d40000",
      "SubProcessTag":"0",
      "TID":"11996",
      "ProviderName":"Microsoft-Windows-Kernel-Process",
      "PName":"",
      "UserStackBase":"0x3d640000",
      "EventName":"ThreadStop/Stop",
      "Win32StartAddr":"0x7fffe299a110"
   }
}

수집 후 처리

PowerShell에서 데이터 필터링

다음 간단한 함수를 사용하여 PowerShell에서 SilkETW의 JSON 출력을 가져올 수 있습니다.

root@kitploit:~
function Get-SilkData {
	param($Path)
	$JSONObject = @()
	Get-Content $Path | ForEach-Object {
		$JSONObject += $_ | ConvertFrom-Json
	}
	$JSONObject
}

아래 예에서는 커널 공급자로부터 프로세스 이벤트 데이터를 수집하고 이미지 로드를 사용하여 Mimikatz 실행을 식별합니다. 다음 명령으로 필요한 데이터를 수집할 수 있습니다.

root@kitploit:~
SilkETW.exe -t kernel -kk ImageLoad -ot file -p C:\Users\b33f\Desktop\mimikatz.json

데이터가 있으면 원하는 속성을 정렬, grep 및 필터링하기 쉽습니다.

Mimikatz

Yara

SilkETW에는 이벤트 데이터를 필터링하거나 태그하는 Yara 기능이 포함되어 있습니다. 다시 말하지만, 이는 명백한 방어 기능을 가지고 있지만 ETW 연구를 보강하는 데에도 쉽게 사용할 수 있습니다.

이 예에서는 Cobalt Strike의 execute-assembly를 통해 메모리에서 Seatbelt 실행을 감지하기 위해 다음 Yara 규칙을 사용합니다.

root@kitploit:~
rule Seatbelt_GetTokenInformation
{
	strings:
		$s1 = "ManagedInteropMethodName=GetTokenInformation" ascii wide nocase
		$s2 = "TOKEN_INFORMATION_CLASS" ascii wide nocase
		$s3 = /bool\(native int,valuetype \w+\.\w+\/\w+,native int,int32,int32&/
		$s4 = "locals (int32,int64,int64,int64,int64,int32& pinned,bool,int32)" ascii wide nocase
	
	condition:
		all of ($s*)
}

다음 명령으로 .Net ETW 데이터 수집을 시작할 수 있습니다. 여기서 "-yo" 옵션은 Yara 일치 항목만 디스크에 기록해야 함을 나타냅니다!

root@kitploit:~
SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -l verbose -y C:\Users\b33f\Desktop\yara -yo matches -ot file -p C:\Users\b33f\Desktop\yara.json

런타임에서 Yara 규칙이 적중되었음을 볼 수 있습니다.

Seatbelt

또한 "Microsoft-Windows-DotNETRuntime" 이벤트의 하위 집합(0x2038), 특히 JitKeyword, InteropKeyword, LoaderKeyword 및 NGenKeyword만 캡처하고 있음에 유의하십시오.

SilkETW 및 SilkService를 얻는 방법?

소스를 다운로드하여 Visual Studio에서 컴파일하거나 Visual Studio의 커뮤니티 에디션을 무료로 받을 수 있습니다. 또는 릴리스에서 최신 사전 빌드 버전을 가져올 수 있습니다.

향후 작업

변경 로그

버전별 변경 사항에 대한 자세한 내용은 변경 로그를 참조하십시오.

로드맵

  • 사용자에게 추적 데이터를 *.etl 파일로 디스크에 쓸 수 있는 옵션을 제공합니다.
  • 사용자에게 추적 데이터를 Windows 이벤트 로그에 쓸 수 있는 옵션을 제공합니다. (v0.5+)
  • 사용자에게 사전 컴파일된 릴리스를 제공합니다. (v0.6+)
  • 구성 파일과 함께 서비스로 배포할 수 있는 별도 인스턴스(SilkService)를 만듭니다. (v0.7+)
  • 제안을 환영합니다!
도구 다운로드