
컴파일된 .NET 어셈블리의 입력 표면과 보안 문제를 실행하지 않고 발견하세요.
Install-Module -Name DllSpy
# 모든 표면 나열
dllspy ./MyApi.dll
# 보안 취약점 스캔
dllspy ./MyApi.dll -s
# 표면 유형별 필터링 (HttpEndpoint, SignalRMethod, WcfOperation, GrpcOperation, RazorPage, BlazorComponent, AzureFunction, ODataEndpoint)
dllspy ./MyApi.dll -t HttpEndpoint
# HTTP 메서드 및 클래스 이름별 필터링
dllspy ./MyApi.dll -m DELETE -c User*
# 인증된/익명 표면만
dllspy ./MyApi.dll --auth
dllspy ./MyApi.dll --anon
# 호스트(실행 가능) 어셈블리만 스캔, 클래스 라이브러리 건너뛰기
dllspy ./MyApi.dll --host-only
# 최소 심각도로 스캔
dllspy ./MyApi.dll -s --min-severity High
# 출력 형식: table(기본값), tsv, json
dllspy ./MyApi.dll -o json
dllspy ./MyApi.dll -o tsv
# 보호되지 않은 모든 경로 나열
dllspy ./MyApi.dll -o json | jq '[.[] | select(.requiresAuthorization == false) | .displayRoute]'
# 표면 유형별 개수 세기
dllspy ./MyApi.dll -o json | jq 'group_by(.surfaceType) | map({type: .[0].surfaceType, count: length})'
# 보안 문제를 간결한 표로 출력
dllspy ./MyApi.dll -s -o json | jq -r '.[] | [.severity, .surfaceRoute, .title] | @tsv'
# 모든 표면
Search-DllSpy -Path .\MyApi.dll
# 표면 유형별 필터링
Search-DllSpy -Path .\MyApi.dll -Type HttpEndpoint
Search-DllSpy -Path .\MyApi.dll -Type SignalRMethod
Search-DllSpy -Path .\MyApi.dll -Type WcfOperation
Search-DllSpy -Path .\MyApi.dll -Type GrpcOperation
Search-DllSpy -Path .\MyApi.dll -Type RazorPage
Search-DllSpy -Path .\MyApi.dll -Type BlazorComponent
Search-DllSpy -Path .\MyApi.dll -Type AzureFunction
Search-DllSpy -Path .\MyApi.dll -Type ODataEndpoint
# HTTP 메서드별 필터링
Search-DllSpy -Path .\MyApi.dll -HttpMethod DELETE
# 클래스 이름별 필터링 (와일드카드 지원)
Search-DllSpy -Path .\MyApi.dll -Class User*
# 인증된/익명 표면만
Search-DllSpy -Path .\MyApi.dll -RequiresAuth
Search-DllSpy -Path .\MyApi.dll -AllowAnonymous
# 호스트(실행 가능) 어셈블리만 스캔, 클래스 라이브러리 건너뛰기
Search-DllSpy -Path .\bin\*.dll -HostOnly
# 보안 문제 찾기
Test-DllSpy -Path .\MyApi.dll
# 높은 심각도 이슈만
Test-DllSpy -Path .\MyApi.dll -MinimumSeverity High
# 보안 문제에 대해 호스트 어셈블리만 스캔
Test-DllSpy -Path .\bin\*.dll -HostOnly
# 상세 보기
Test-DllSpy -Path .\MyApi.dll | Format-List
| 프레임워크 | 탐지 방법 | 표면 유형 |
|---|---|---|
| ASP.NET Core / Web API | 컨트롤러 기본 클래스, [ApiController], 명명 규칙 | HttpEndpoint |
| SignalR | Hub / Hub<T> 상속 | SignalRMethod |
| WCF | [ServiceContract] 인터페이스 + [OperationContract] 메서드 | WcfOperation |
| gRPC | BindService가 포함된 생성된 기본 클래스 | GrpcOperation |
| Razor Pages | PageModel 상속, On{Verb}[Handler][Async] 메서드 | RazorPage |
| Blazor | ComponentBase 상속 + [Route] 특성 | BlazorComponent |
| Azure Functions | [FunctionName] / [Function] + [HttpTrigger] 매개변수 | AzureFunction |
| OData | ODataController 상속 | ODataEndpoint |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 상태 변경 엔드포인트 | [Authorize] 없이 DELETE, POST, PUT 또는 PATCH |
| 중간 | 권한 부여 선언 누락 | 엔드포인트에 [Authorize]도 [AllowAnonymous]도 없음 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 허브 메서드 | [Authorize] 없이 클라이언트가 직접 호출 가능한 허브 메서드 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 WCF 작업 | [PrincipalPermission] 또는 [Authorize] 없는 작업 |
| 낮음 | 역할 없는 권한 부여 | [PrincipalPermission]은 존재하지만 Role 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 gRPC 작업 | [Authorize] 없는 서비스 메서드 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 상태 변경 핸들러 | [Authorize] 없이 POST, PUT, DELETE 또는 PATCH 핸들러 |
| 중간 | 권한 부여 선언 누락 | 핸들러에 [Authorize]도 [AllowAnonymous]도 없음 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 라우팅 가능 컴포넌트 | [Route]는 있지만 [Authorize] 없는 컴포넌트 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 Azure Function | AuthorizationLevel.Anonymous이고 [Authorize] 특성 없음 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
| 심각도 | 규칙 | 설명 |
|---|---|---|
| 높음 | 인증되지 않은 상태 변경 엔드포인트 | [Authorize] 없이 DELETE, POST, PUT 또는 PATCH |
| 중간 | 권한 부여 선언 누락 | 엔드포인트에 [Authorize]도 [AllowAnonymous]도 없음 |
| 낮음 | 역할/정책 없는 권한 부여 | [Authorize]는 존재하지만 Roles 또는 Policy 미지정 |
LICENSE 파일을 참조하세요.