vulnerability-scanning

4 개의 포스트

cloudflare

나만의 취약점 테스트 하네스 구축하기 (새 탭에서 열림)

프론티어 모델 하나에 의존하는 대신, 모델을 교체할 수 있는 취약점 분석 하니스(harness)를 구축해야 한다는 글입니다. 하니스는 정찰·탐색·검증·중복 제거·재검증·트리아지를 지속적으로 수행하며, 수천 개의 후보를 실행 가능한 취약점 목록으로 줄입니다. 핵심은 LLM을 상태를 보존하지 않는 계산 엔진으로 취급하고, 분석 상태와 결과를 데이터베이스 및 파이프라인에 외부화하는 것입니다. ## 단일 에이전트 방식의 한계 - 일반적인 코딩 에이전트는 한 번에 하나의 가설만 유지하므로 대규모 저장소의 여러 공격 경로를 동시에 분석하기 어렵습니다. - 컨텍스트 창이 가득 차면 컨텍스트 압축 과정에서 이전에 발견한 버그나 분석 근거를 잃을 수 있습니다. - 단일 저장소만 분석하면 다른 애플리케이션·라이브러리·서비스와의 연결에서 발생하는 취약점을 놓칩니다. - 한 번 실행한 결과는 전체 버그의 약 절반 정도만 찾으며, 비교적 단순한 취약점에 편향되는 경향이 있습니다. - 분석을 여러 번 실행한 뒤 결과를 사람이 직접 비교해야 한다면, 이미 전용 하니스가 필요한 단계에 도달한 것입니다. ## 모델에 독립적인 하니스가 필요한 이유 - 특정 모델에 시스템을 맞추면 해당 모델이 코드를 바라보는 방식에 분석 범위가 고정됩니다. - 서로 다른 모델을 같은 코드에 적용하면 각 모델이 서로 다른 취약점을 발견할 수 있습니다. - 예를 들어 한 모델은 초기 탐색을 담당하고, 다른 모델은 발견된 취약점의 재현 가능성과 타당성을 검증하도록 구성할 수 있습니다. - 모델이 교체되거나 더 뛰어난 모델이 등장해도 하니스의 상태 관리·오케스트레이션·트리아지 구조는 그대로 유지할 수 있습니다. - 따라서 장기적으로 중요한 자산은 특정 프롬프트나 모델보다 모델을 연결하고 결과를 관리하는 하니스입니다. ## 초기 보안 감사 스킬 처음에는 약 450줄 규모의 `security-audit` 스킬을 단일 저장소에서 실행하며 프롬프트를 조정했습니다. 이후 이 스킬의 단계가 전체 하니스의 기본 구조로 확장되었습니다. - **정찰(Recon)** - 세 개의 병렬 연구 에이전트가 저장소 구조와 아키텍처를 조사합니다. - 결과를 `architecture.md`에 기록합니다. - **공격 탐색(Hunt)** - 공격 클래스별로 Hunter 에이전트를 실행합니다. - 코드를 검토하는 데 그치지 않고 실제로 깨뜨리는 시도를 합니다. - **검증(Validate)** - 적대적 검증 에이전트가 각 발견을 반박하려고 시도합니다. - 재현되지 않거나 근거가 약한 후보를 제거합니다. - **보고서 작성(Report)** - 살아남은 취약점을 사람이 읽을 수 있는 보고서로 정리합니다. - **기계적 검증** - `findings.json`을 정해진 스키마에 맞춰 생성합니다. - 파일 형식뿐 아니라 취약점에 언급된 함수와 줄 번호가 실제 소스에 존재하는지도 검사합니다. - **독립 재검증** - 별도의 새로운 에이전트가 소스를 기준으로 모든 발견을 다시 확인합니다. - 최종 생존 항목만 수집 API로 제출합니다. ## 파이프라인으로의 확장 초기 스킬의 단계는 다음과 같이 하니스의 파이프라인으로 대응됩니다. - `architecture.md`를 생성하는 연구 에이전트 → **Recon** - 공격 유형별 Hunter → **Hunt** - 발견을 반박하는 Validator → **Validate** - 검증된 항목의 보고서화 → **Report** - `findings.json`의 스키마 및 소스 위치 검사 → **기계적 검증** - 새로운 에이전트의 최종 확인 → **독립 검증** 이 구조는 한 번의 긴 세션에 모든 작업을 몰아넣지 않고, 각 작업을 독립적으로 실행·저장·재시작할 수 있게 합니다. ## 상태를 외부화해야 하는 이유 - **컨텍스트 고갈** - 장시간 실행하면 모델이 기존 분석 내용을 잊습니다. - 분석 상태, 가설, 조사 결과, 발견 사항을 데이터베이스 등에 저장해 모델의 기억에 의존하지 않도록 해야 합니다. - LLM은 상태를 가진 작업자라기보다 필요할 때 호출되는 계산 엔진으로 취급합니다. - **지속성 부족** - 네트워크 오류, API 제한, 프로세스 충돌이 발생해도 처음부터 다시 시작해서는 안 됩니다. - 각 단계의 진행 상황과 결과를 저장하면 중단된 지점부터 재개할 수 있습니다. - **재범위 지정과 교차 참조** - 독립적인 조사 결과를 나중에 다시 불러오고, 다른 발견이나 저장소와 연결할 수 있어야 합니다. - 수백 개의 조사를 별도의 실행 단위로 유지해야 중복 제거와 후속 검증이 가능합니다. ## 대규모 트리아지와 교차 저장소 분석 - 엔터프라이즈 환경에서는 원시 취약점 후보가 수천 개 생성될 수 있습니다. - 하니스는 후보를 수집하는 것에서 끝나지 않고, 검증·중복 제거·우선순위 지정 과정을 거쳐 신뢰할 수 있는 수정 큐로 줄여야 합니다. - 단일 저장소 분석만으로는 해당 저장소를 사용하는 애플리케이션과의 인터페이스 문제를 볼 수 없습니다. - 여러 저장소 간 의존성과 데이터 흐름을 추적하면 구성 요소 사이에서만 드러나는 취약점을 찾을 수 있습니다. - 다만 교차 저장소 추적은 초기 구현부터 넣기보다, 실제로 중요한 저장소가 여러 개일 때 도입하는 것이 권장됩니다. ## 단계적으로 구축하는 방법 - 최소한의 하니스는 데이터베이스에 상태를 저장하는 **Recon, Hunt, Validate** 세 단계로 시작할 수 있습니다. - 자기 자신이 발견 사항을 제출하지 못하는 별도의 Validator를 두어 검증 편향을 줄입니다. - 먼저 개발 환경에서 단일 스킬로 프롬프트와 공격 시나리오를 충분히 다듬습니다. - 다음 기능은 현재의 병목이 명확해졌을 때만 추가합니다. - 중단 후 재개가 문제라면 영속성 추가 - 결과가 너무 많으면 중복 제거 에이전트 추가 - 여러 저장소가 실제 분석 대상이 되면 교차 저장소 추적 추가 - 초기부터 전부 자동화하기보다, 현재 작업을 가장 느리게 만드는 문제를 해결하는 방향으로 하니스를 확장해야 합니다. 실용적으로는 특정 모델이나 프롬프트에 시스템을 종속시키지 말고, 분석 상태·발견 사항·검증 결과를 저장하는 모델 독립적 파이프라인부터 구축하는 것이 좋습니다.

cloudflare

능동적 방어: API를 (새 탭에서 열림)

Cloudflare는 기존 WAF의 수동적 방어를 넘어, API의 복잡한 로직 결함을 사전에 탐지하는 '상태 기반(Stateful) 웹 및 API 취약점 스캐너'를 출시했습니다. 이 서비스는 OWASP API Top 10 중 가장 치명적인 BOLA(객체 수준 권한 위반)를 우선적으로 겨냥하며, 유효한 요청으로 위장한 논리적 공격을 찾아내는 데 집중합니다. Cloudflare의 엣지 네트워크 지능과 기존 API Shield 기능을 결합하여, 트래픽이 부족한 개발 환경에서도 자동화된 보안 테스트가 가능해진 것이 핵심입니다. ### API 보안에서 논리적 결함과 BOLA의 위험성 * 기존 웹 취약점(SQL Injection, XSS 등)은 구문 오류의 형태를 띠어 탐지가 용이하지만, API 취약점은 정상적인 HTTP 요청 형식을 유지하면서 비즈니스 로직을 악용하는 경우가 많습니다. * BOLA(Broken Object Level Authorization)는 공격자가 유효한 본인의 인증 토큰을 사용하되, 요청 파라미터의 ID값만 타인의 것으로 교체하여 권한이 없는 데이터에 접근하는 방식입니다. * 이러한 공격은 인증과 스키마가 모두 적절해 보이기 때문에, 단순히 패턴을 매칭하는 전통적인 WAF나 봇 관리 도구로는 방어하기 매우 어렵습니다. ### 기존 DAST 및 수동적 보안의 한계 * 수동적 보안(Passive Scanning)은 실제 사용자 트래픽에 의존하므로, 트래픽이 없는 개발 단계나 새로운 환경에서는 취약점을 미리 발견할 수 없습니다. * 전통적인 DAST(동적 애플리케이션 보안 테스트) 도구는 구성이 복잡하고, 수동으로 OpenAPI 파일을 업데이트해야 하며, 현대적인 복잡한 로그인 흐름을 처리하는 데 한계가 있습니다. * 대부분의 기존 스캐너는 각 요청을 독립적으로 처리하는 '무상태(Stateless)' 방식이라, 여러 요청을 연결하여 로직을 검증해야 하는 BOLA 탐지에 부적합합니다. ### Cloudflare의 상태 기반(Stateful) 스캐닝 기술 * **상태 기반 테스트**: '소유자(Owner)' 계정으로 자원을 생성한 뒤 '공격자(Attacker)' 계정으로 해당 자원에 접근을 시도하는 등, 요청 간의 상관관계를 추적하는 체인형 테스트를 수행합니다. * **자동화된 스캔 플랜**: 제공된 OpenAPI 스키마를 분석하여 API 호출 그래프를 스스로 구축하고, 이를 기반으로 공격 시나리오를 자동 설계합니다. * **API Shield와의 통합**: 기존의 API Discovery 및 Schema Learning 데이터를 활용하므로, 사용자는 복잡한 설정 없이도 자신의 API 구조에 최적화된 스캔을 즉시 시작할 수 있습니다. * **능동적 검증**: 수동적인 트래픽 관찰에서 얻은 통찰을 바탕으로 실제 공격 요청을 생성하여 전송함으로써, 보안 위협이 실재하는지 능동적으로 입증합니다. BOLA와 같은 로직 결함은 코드 수준의 수정이 필수적이므로, API Shield 고객은 이번 베타 버전을 활용해 운영 환경뿐만 아니라 개발 단계에서부터 취약점을 선제적으로 식별하고 수정하는 '시프트 레프트(Shift-left)' 보안 전략을 구축할 것을 권장합니다.

github

GitHub Security Lab의 오픈 소스 (새 탭에서 열림)

GitHub Security Lab은 오픈 소스 AI 프레임워크인 **Taskflow Agent**와 웹 보안 감사용 taskflow를 활용해 80건 이상의 취약점을 발견했으며, 그중 상당수는 인증 우회와 민감 정보 노출처럼 영향도가 높은 취약점이었다고 설명합니다. 이 방식은 대형 단일 프롬프트 대신 여러 단계의 작업을 YAML로 정의하고, LLM의 분석 결과를 데이터베이스로 전달해 반복적·구조적인 보안 감사를 수행합니다. 프레임워크와 taskflow는 공개되어 있어 GitHub Copilot 사용자는 자신의 저장소에서도 실행할 수 있습니다. ## 오픈 소스 AI 보안 감사의 성과 - 새로운 taskflow는 웹 애플리케이션 취약점 탐색에 특화되어 있습니다. - 지금까지 80건 이상의 취약점을 보고했으며, 작성 시점에 약 20건이 공개되었습니다. - 발견된 취약점의 상당수는 다음과 같은 고위험 유형입니다. - 인증 또는 권한 우회 - 다른 사용자로 로그인할 수 있는 문제 - 다른 사용자의 비공개 데이터에 접근하는 정보 노출 - 글에서 제시한 사례로는 다음이 언급됩니다. - 전자상거래 애플리케이션의 장바구니에서 개인식별정보(PII) 접근 - 채팅 애플리케이션에서 어떤 비밀번호를 사용해도 로그인 가능한 문제 - 연구자들은 기존에 악용 가능성이 불분명한 후보를 검증하는 데 쓰던 시간을 줄이고, 실제 결과를 수동 검증하고 보고하는 데 더 집중할 수 있게 되었다고 설명합니다. ## 자신의 저장소에서 실행하는 방법 - `GitHubSecurityLab/seclab-taskflows` 저장소에서 Codespace를 시작합니다. - 초기화가 끝난 뒤 다음 명령을 실행합니다. ```bash ./scripts/audit/run_audit.sh myorg/myrepo ``` - 중간 규모 저장소에서는 실행에 한두 시간이 걸릴 수 있습니다. - 완료되면 SQLite 뷰어가 열리고, `audit_results` 테이블에서 `has_vulnerability` 열이 체크된 행을 확인합니다. - 실행에는 GitHub Copilot 라이선스가 필요하며, 프리미엄 모델 요청 할당량을 많이 사용할 수 있습니다. - LLM 결과는 비결정적이므로 같은 코드베이스를 여러 번 검사하는 것이 권장됩니다. - 서로 다른 모델을 사용하면 결과가 달라질 수 있습니다. - 예시로 GPT 5.2와 Claude Opus 4.6을 각각 사용할 수 있습니다. - 비공개 저장소도 지원하지만, Codespace 설정을 수정해 접근 권한을 별도로 부여해야 합니다. ## Taskflow의 구조 - Taskflow는 LLM에 수행시킬 작업 목록을 YAML로 정의한 파일입니다. - `seclab-taskflow-agent`가 다음 기능을 담당합니다. - 작업을 순차적으로 실행 - 앞선 작업의 결과를 다음 작업에 전달 - 여러 구성 요소에 같은 작업을 비동기적으로 반복 실행 - 템플릿 프롬프트에 구성 요소별 정보를 삽입 - 저장소 감사는 일반적으로 다음 단계로 나뉩니다. - 저장소를 기능별 구성 요소로 분할 - 각 구성 요소의 진입점, 신뢰할 수 없는 입력, 요구 권한, 역할 등을 분석 - 분석 결과를 `repo_context.db` 같은 데이터베이스에 저장 - 저장된 컨텍스트를 사용해 취약점 후보를 생성 - 후보별로 세부 검증을 수행 - 현재는 각 구성 요소에 대해 일반적인 보안 문제를 제안하는 작업과, 제안된 문제를 정밀하게 검증하는 작업이 사용됩니다. - 특정 취약점 유형에 집중하는 별도의 taskflow도 추가할 수 있습니다. ## 하나의 거대한 프롬프트 대신 여러 작업을 사용하는 이유 - LLM의 컨텍스트 창에는 한계가 있습니다. - 복잡한 작업을 하나의 프롬프트에 모두 넣으면 일부 단계가 누락되거나 제대로 수행되지 않을 수 있습니다. - 작업을 분리하면 다음과 같은 장점이 있습니다. - 각 단계의 결과를 개별적으로 확인 가능 - 실패하거나 잘못된 단계를 디버깅하기 쉬움 - 이전 분석 결과를 후속 작업의 컨텍스트로 재사용 가능 - 여러 코드 구성 요소에 동일한 분석을 일관되게 적용 가능 - 더 큰 컨텍스트 창을 지원하는 모델에서도, 작업 흐름을 통제하고 검증하기 위해 taskflow 방식이 유용하다고 설명합니다. ## 일반 보안 코드 감사에서의 과제 - 초기에는 CodeQL 경고 분류처럼 범위와 판단 기준이 명확한 작업에 Taskflow Agent를 사용했습니다. - 이후 특정 경고에 한정하지 않고 일반적인 취약점까지 찾는 방식으로 확장했습니다. - LLM에 더 많은 자유를 주면 다음 문제가 커집니다. - 환각 - 오탐 - 검증하기 어려운 취약점 보고 - CodeQL 경고 분류가 효과적이었던 이유는 지시와 판정 기준이 엄격하고, 각 단계에서 결과가 요구사항을 충족하는지 확인할 수 있었기 때문입니다. - 따라서 목표는 LLM이 다양한 취약점을 자유롭게 탐색하게 하면서도 taskflow 설계와 프롬프트 엔지니어링으로 환각과 오탐을 통제하는 것입니다. ## 실용적인 권장 사항 실제 프로젝트에 적용할 때는 한 번의 실행 결과를 확정적인 보안 보고서로 취급하지 말고, 여러 모델과 반복 실행으로 후보를 수집한 뒤 사람이 재현 가능성과 악용 가능성을 검증하는 것이 좋습니다. 또한 저장소 전체를 한 번에 분석하기보다 기능별 구성 요소와 단계별 taskflow로 나누면 결과를 추적하고 수정하기 쉽습니다.

kakao

YEYE가 지켜보고 있다–카카오의 공격 표면 관리 이야기 (새 탭에서 열림)

카카오는 복잡해지는 외부 공격 표면을 체계적으로 관리하기 위해 통합 ASM(Attack Surface Management) 도구인 'YEYE'를 개발하여 운영 중입니다. YEYE는 자산 식별부터 취약점 스캐닝, 데이터 연관 분석까지 자동화하며, 이를 'DSR(Daily Security Review)'이라는 매일의 보안 프로세스와 결합해 실질적인 리스크를 선제적으로 제거합니다. 이를 통해 기술적 자동화와 인적 리뷰가 유기적으로 연결된 견고한 보안 방어 체계를 구축하고 있습니다. ### 공격 표면 관리의 핵심, YEYE와 DSR * 2023년 탄생한 YEYE는 산재된 보안 도구를 통합하여 외부 접점이 있는 IP, 도메인, 포트, 모바일 앱 등 모든 디지털 자산을 가시화합니다. * 단순한 도구 도입에 그치지 않고, 매일 오전 외부 피드와 공개 취약점을 검토하는 DSR(Daily Security Review) 프로세스를 통해 사람에 의한 심층 분석을 병행합니다. * 이를 통해 보안 검수를 받지 않은 자산 노출이나 최신 CVE 이슈에 대해 공격자보다 한발 앞선 대응 체계를 유지합니다. ### 자산의 체계적 정의와 데이터 모델링 * 자산을 범위(In/Out), 타입(Domain/IP/Port 등), 식별 여부(Known/Unknown)로 분류하여 자산이 확장되더라도 일관된 관리 규칙을 적용합니다. * 다양한 소스에서 수집된 정보를 표준화하고 레이블링(Labeling)하여 데이터의 근본적인 성격을 정의하고 활용도를 높입니다. * 자산과 취약점, CVE, 담당자 정보를 다형성 구조로 연결하여 특정 보안 이슈 발생 시 영향 범위를 즉각적으로 파악하고 조치 이력을 추적할 수 있습니다. ### 대규모 스캔 환경의 기술적 최적화 * **네트워크 병목 해소:** 내부 물리 서버의 대역폭 한계를 극복하기 위해 퍼블릭 클라우드를 병행 운영함으로써 대규모 동시 요청 시 발생하는 지연 문제를 해결했습니다. * **병렬 스캔 구조 구현:** 오픈소스 스캐너의 단일 프로세스 한계를 넘기 위해 스케줄러와 큐, 다수의 워커가 독립적으로 작동하는 분산 병렬 처리 구조를 직접 설계했습니다. * **비용 및 성능 균형:** 고사양 서버를 무조건 투입하기보다 스캔 특성에 맞는 최소 스펙을 도출하고, 적정 스펙의 서버를 효율적으로 분산 확장하는 가성비 기반 인프라를 구축했습니다. * **서비스 영향 최소화:** 스캔 트래픽을 공격으로 오해하지 않도록 고정 IP와 전용 User-Agent 정보를 제공하며, 초당 호출 수와 타임아웃 등 핵심 파라미터를 정밀하게 튜닝했습니다. 공격 표면 관리는 단순히 자산을 찾는 기술을 넘어, 수집된 데이터를 자산 중심으로 연결하고 매일 반복되는 리뷰 프로세스를 내재화할 때 완성됩니다. 대규모 인프라를 운영하는 조직이라면 네트워크 병목과 비용 효율을 고려한 분산 스캔 구조를 설계하고, 서비스 부하를 고려한 정밀한 튜닝을 통해 공격자보다 먼저 약점을 찾아내는 체계를 갖출 것을 권장합니다.