Callee 커버리지

Noir의 엔드포인트별 1-hop callee 추출을 지원하는 프레임워크 범위입니다.

Noir는 엔드포인트마다 1-hop 핸들러 callee를 찾을 수 있는 만큼 붙여 줍니다. callee는 라우트 핸들러 본문 안에서 바로 호출되는 함수, 메서드, 프레임워크 호출입니다. AI SAST 도구와 코드 리뷰어가 다음에 볼 코드를 고를 때 도움이 됩니다.

--include callee로 켭니다.

noir scan . --include callee

이 플래그는 plain 출력뿐 아니라 모든 출력 형식에 적용됩니다. JSON, JSONL, YAML, TOML은 엔드포인트의 callees 필드를 채웁니다(플래그가 없으면 비어 있습니다). OpenAPI 2.0/3.0은 operation 단위 x-noir-callees 확장을 추가하고, SARIF는 result.properties.noir.callees에 담고, Postman은 item 설명에 읽기 쉬운 목록을 덧붙입니다. cURL, HTTPie, PowerShell, only-url, only-param처럼 명령이나 필터 용도의 출력은 본래 출력이 바뀌지 않도록 callee를 넣지 않습니다.

path와 line은 찾을 수 있는 만큼 찾은 위치입니다. 대부분의 분석기는 호출 위치를 기록합니다. 정의를 추적할 수 있는 분석기는 callee가 정의된 위치를 찾으면 그곳을, 못 찾으면 호출 위치를 기록합니다.

커버리지 매트릭스

아래 표는 Noir가 엔드포인트별로 callee를 추출하는 프레임워크 목록입니다. Noir의 tech 메타데이터(프레임워크 callee 칩, noir list techs와 같은 소스)에서 자동으로 만들기 때문에 분석기와 항상 맞습니다. 여기에 없는 프레임워크도 엔드포인트 탐지는 될 수 있지만, callee는 나오지 않는다고 보세요.

Language Frameworks with callee coverage
C CivetWeb, Mongoose, libmicrohttpd
C# ABP Framework, ASP.NET Core MVC, ASP.NET Core Minimal API, ASP.NET MVC, Carter, FastEndpoints, ServiceStack, System.Net.HttpListener, Wolverine.Http
C++ Crow, Drogon, cpp-httplib, oat++
Clojure Compojure, Pedestal, Reitit
Crystal Amber, Grip, Kemal, Lucky, Marten
Dart Alfred, Angel3, Dart Frog, GetServer, Serverpod, Shelf
Elixir Bandit, Phoenix, Plug
F# Giraffe
Go Beego, Chi, Echo, Fiber, Gin, GoFrame, Gorilla Mux, Goyave, Hertz, Huma, Iris, Kratos, PocketBase, fasthttp, go-restful, go-zero, httprouter, net/http
Groovy Grails
Haskell Scotty, Servant, Yesod
Java Apache Struts 2, Apache Wicket, Armeria, Dropwizard, Helidon MP, Helidon SE, JAX-RS, JDK HttpServer, Javalin, Micronaut, Play Framework, Quarkus, Spark Java, Spring, Vert.x
JavaScript AdonisJS, Apollo Server, Astro, Cloudflare Pages Functions, Egg.js, Elysia, Expo Router, Express, Fastify, Feathers, Fresh, Hapi, Hono, HonoX, Koa, NestJS, Netlify Functions, Next.js, Nitro, NuxtJS, Oak, Qwik City, React Router, Remix, Restify, SolidStart, SvelteKit, Vercel Functions
Kotlin Ktor, Spring, http4k
Lua Lapis, lor
PHP CakePHP, CodeIgniter, Hyperf, Laminas, Laravel, Lumen, Phalcon, Pure, Slim, Symfony, ThinkPHP, Yii2
Perl Catalyst, Dancer2, Mojolicious
Python AWS Lambda Powertools, Bottle, Chalice, CherryPy, Django, Django Ninja, Falcon, FastAPI, FastHTML, Flask, Frappe, Litestar, Masonite, Odoo, Pyramid, Quart, Robyn, Sanic, Starlette, Tornado, aiohttp, http.server
R Plumber
Ruby Grape, Hanami, Padrino, Rails, Roda, Sinatra, WEBrick
Rust Actix Web, Axum, Dioxus, Gotham, Leptos, Loco, Poem, RWF, Rocket, Salvo, Tide, Warp, ntex
Scala Akka HTTP / Pekko HTTP, Finatra, Play Framework, Scalatra, Tapir, ZIO HTTP, http4s
Swift Hummingbird, Kitura, Vapor
TypeScript LoopBack, Midway, NestJS, TanStack Router, Ts.ED, Wasp, inversify-express-utils, routing-controllers, tRPC, tsoa
Zig Jetzig, Tokamak, Zap, httpz, std.http.Server

완성도 참고 사항

  • Callee는 1-hop까지만 봅니다. Noir는 호출을 따라가는 전체 call graph를 만들지 않습니다.
  • 동적 디스패치, 미들웨어 체인, 데코레이터, 매크로 확장, 생성된 코드, 리플렉션 뒤에 있는 호출은 정적 추출에서 빠질 수 있습니다.
  • 이름 있는 핸들러를 쓰는 프레임워크가 동적이거나 인라인 콜백이 많은 프레임워크보다 callee를 더 잘 잡습니다.
  • 정의 추적은 조금씩 넓혀 가는 중이며, 지금은 분석기마다 지원 여부가 다릅니다.
  • 받는 도구가 쓰기 편하도록 callee는 엔드포인트마다 중복을 없애고 개수를 제한합니다.
  • renderer나 request accessor 같은 프레임워크 헬퍼는 엔드포인트가 입력과 출력을 어떻게 다루는지 보여 주므로 일부러 남겨 둡니다.