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를 시작합니다.
  • 초기화가 끝난 뒤 다음 명령을 실행합니다.
./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로 나누면 결과를 추적하고 수정하기 쉽습니다.