[MicrosoftDataSchool] 61~71일차 - 2차 팀 프로젝트 <AutoDetect>: Azure Databricks를 활용한 소스코드 취약점 자동탐지 및 분석 솔루션

RudinP·2026년 4월 17일

Microsoft Data School 3기

목록 보기
52/68

Github 링크

CWE 공식 문서에 기반한 js 코드 취약점 탐지 VS Extension

1. 제안 배경

  • LLM 및 Vibe Coding을 활용한 코드 단위 개발자 계층의 증대로 공격 벡터(Attack Vector) 증가
  • 개발 단계에서 발견되지 않은 취약점은 테스트 및 배포과정에서 더 큰 수정 비용과 운영 리스크로 직결
  • 보안 지식이 부족한 전공자 혹은 비전공자 개발자를 위한 저비용 소스코드 취약점 분석 지침 가이드 필요
  • 시중 상용 취약점 탐지 및 보수 솔루션의 한계
    • 개발자가 코딩 작업 중 즉시 활용 가능해야 함
    • 탐지 자체가 아닌 유지 보수에 도움이 되는 설명 필요
    • 공식 보안 기준에 따른 취약점 정보에 대한 설명 필요

본 프로젝트의 제안 방향

  • Hallucination 방지를 위한 비생성형 AI 기반 취약점 탐지와 RAG+LLM 기술을 활용한 설명 기능의 결합
  • AI 모델 신뢰성 확보를 위한 모델 의사결정 투명성 확보
  • Azure Cloud Resource 기반으로 확장성 및 범용성 확보

2. 추진 필요성

  • 취약점 발견 시점이 늦어짐에 따라 수정 범위 및 비용 증가로 인한 조기 발견 필요
  • 보안 내재화(Security By Design): 보안의 사후 대응이 아닌 소프트웨어 설계 단계에서의 보안 고려
    • 소프트웨어 개발자 중심의 보안 내재화 필요
  • 설명 가능한 분석 체계
    • 단순 “취약점 탐지”에 그치지 않는 “모델의 의사결정 투명성”을 보장하는 XAI 기술 도입
    • 실제 현장에서 필요한 정보는 “취약점이 있음”이 아닌 “코드의 어떤 부분이 취약점인지”가 필요
    • 또한, 취약점 분석 시 Exploit 위험도 우선순위에 따른 수정 절차 필요

3. 제안 개요

(1) 목적

  • 소스코드 내 보안 취약점을 자동으로 탐지
  • 해당 소스코드에서 발견된 취약점에 대한 MITRE 공식 문서 기반의 설명 제공

(2) 구성

  • 1단계: 비생성형 ML 모델을 활용한 취약점 탐지
  • 2단계: 발견된 취약점 설명 및 대응 가이드
  • 3단계: 개발 환경 연계 (VSCode Extension)

4. 기대 효과

(1) 보안 리스크 사전 예방

  • 개발 초기 단계에서 취약점 식별 가능
  • CI/CD 절차의 이전 단계에서 발생할 수 있는 보안 대책 강구 가능
  • 조직 차원의 리스크 관리 강화 효과 기대

(2) 수정 비용 절감

  • 취약점의 조기 발견을 통한 분석·수정·재검증 비용의 절감 가능
  • 보안에 대한 사전 지식이 부족한 사람에게도 공식 문서 기반의 취약점 정보를 제공해 탐색 시간 단축

(3) 개발 생산성 증대

  • 현재 개발 중인 코드에 적합한 CVE, CWE에 대한 자료를 탐색하지 않아도 취약점에 대한 지표 제공
  • 코드 리뷰 및 보안 검토 효율 향상
  • 반복 발생 취약점에 대한 대응 표준화 가능

(4) 보안 내재화를 통한 시스템 안전성 향상

  • 시스템의 보안 수준을 특정 인력에게 편중시키지 않도록 유도
  • 개발 조직 전체의 보안 인식 제고
  • 장기적인 시스템 보안 유지 기반 마련

5. 차별성 및 도입 타당성

(1) 시장 조사

(2) 차별점

  • XAI 기반 탐지 근거 시각화
  • Azure-based End to End Framework
  • 공식 취약점 문서 기반 RAG 시스템 구축
  • 경량 모델 + 실시간 IDE UX를 통한 개발 도중 즉시 피드백 가능
  • 사용자 피드백 반영을 통한 데이터 재학습 및 정책 최적화까지 확장할 수 있음

6. 리스크 및 대응 방향

(1) 예상 리스크

  • 초기 단계에서 모든 언어 및 모든 취약점 유형을 포괄하기 어려움
  • 데이터셋의 범위와 분포의 한계 존재
  • 탐지 모델과 설명 모델의 적용 범위 차이 존재

(2) 대응 방향

  • 초기는 Vibe Coding에서 특히 많이 사용되는 언어(JavaScript)와 우선순위 높은 취약점으로 한정
  • 취약점 범위 : https://owasp.org/Top10/2025/A01_2025-Broken_Access_Control/
  • 한정된 범위 내의 적정선의 성능 확보 후 점진적으로 확대
  • 생성형 AI 단독 판단이 아닌 공식 문서 기반 결합으로 생성형 기반 타 솔루션과 다른 신뢰도 보완
  • 최종 판단은 개발자 및 보안 담당자 검토로 진행 (보조 기구로서의 의의)
  • 사용자 피드백 및 최신 취약점 문서 반영을 통한 지속적인 개선

기본 관점

  • 본 솔루션은 완전 자동화 및 판단 도구가 아님
  • 개발자와 보안 담당자의 판단을 빠르고 일관되게 지원하는 보조 지표로서의 의의를 가짐

8. 차후 발전 방향

  • 취약점 탐지 모델 정확도 향상
  • 취약점 탐지 모델의 Handling Scope 확장
    • 다언어 지원
    • 학습 데이터베이스 수집 및 구축을 통한 최신 취약점 반영
  • RAG를 활용한 LLM Hallucination 최소화 및 취약점 데이터베이스 기반 수정 방안 제안 기능 추가
  • 서비스 별 반복 발생 취약점 분석 대시보드 제공
  • 최신 OWASP 상위 10개의 취약점에 기반한 우선순위 자동 정렬화

9. 결론

  • 개발 과정에서 보안리스크를 조기에 식별 가능
  • 장기적인 보안 사고 대응 역량 강화를 위해 필요한 보안 지원 도구 및 체계의 구축
  • 핵심 구성
    • 경량화된 비생성형 AI 모델을 활용한 취약점 탐지
    • 설명 가능한 인공지능(XAI) 기술 도입을 통한 모델 투명성 확보
    • 공식 취약점 문서 기반 분석 체계 수립
    • 사용률이 높은 IDE인 VSCode Extension을 통한 UX
  • 기대 효과
    • 시스템 보안 내재화
    • 개발 생산성 향상
    • 운영 리스크 감소
  • 종합
    • 개발 보안 수준 향상, 업무 효율 개선을 동시에 기대할 수 있는 전략적 솔루션

시스템 아키텍처


시연 영상

시연 영상


트러블슈팅

Azure Function 시작 실패 (ModuleNotFoundError: requests) (2026-04-06)

Problem: 배포 후 Function Host 기동 실패
Cause: FlexConsumption 배포 경로에서 remote build 미적용으로 런타임 의존성 미설치
Solution: GitHub Actions에 enable-oryx-build=true, remote-build=true 적용 + runtime/databricks 의존성 분리

Databricks run-now 400 실패 (2026-04-06)

Problem: Function에서 Databricks job 제출 자체 실패
Cause: Job이 job_parameters 계약인데 코드가 notebook_params 사용
Solution: 호출 payload를 job_parameters로 전환

Databricks 태스크 실패 (source_xml_path is required) (2026-04-06~07)

Problem: Function 응답은 성공인데 Databricks task는 내부 실패
Cause: Notebook widget/파라미터 바인딩 누락, base_parameters 미정의
Solution: notebook wrapper에서 파라미터 바인딩 고정 + 전달 경로 정규화

SAS URL 읽기 실패 (binaryFile 진입 오류) (2026-04-07)

Problem: HTTP(S) SAS URL인데 Spark binaryFile 경로로 처리되어 AnalysisException
Cause: 경로 문자열 공백/quote 등으로 분기 미스
Solution: source_xml_path 정규화 + URL scheme 판별 강화 + HTTP(S)는 직접 읽기 강제

Delta 적재 0건/간헐 실패 (2026-04-07~08)

Problem: 실행 완료처럼 보이나 테이블 row count가 0 또는 No module named 'azure' 재발
Cause: XML namespace 미처리 + package import side-effect가 azure SDK 의존성 유입
Solution: parser namespace 처리/빈 결과 가드 추가 + service/shared lazy import 구조로 전환

UC/External Location 생성 불가 (2026-04-06)

Problem: Catalog에서 External data 메뉴 미노출 및 External Location 생성 실패
Cause: Account 권한·metastore 할당·HNS·CREATE EXTERNAL LOCATION 권한 부족
Solution: HNS 활성 스토리지로 전환 + Access Connector/Metastore 권한 보강

GCS→ADF 파라미터 공백으로 파이프라인 오동작 (2026-04-09)

Problem: bucket_name/object_path가 빈 값으로 전달되어 If Condition/경로 처리 실패
Cause: Form 전송(application/x-www-form-urlencoded) 또는 {"parameters":{...}} 중첩 payload 사용
Solution: application/json + 최상위 키(bucket_name, object_path, object_generation)로 고정

Eventarc/Cloud Function 배포 권한 오류 (2026-04-09)

Problem: Eventarc 관련 permission denied, SA not found로 배포 차단
Cause: 이벤트 수신/Invoker/PubSub 퍼블리셔 권한 및 트리거 SA 설정 불일치
Solution: 역할 재부여 + 전용 SA 재지정 + 버킷 리전 맞춘 재배포

Databricks PATH_NOT_FOUND (파일명/경로 변환 이슈) (2026-04-09)

Problem: ADLS 저장 경로와 notebook 읽기 경로 불일치
Cause: ADF Dataset/Copy에서 디렉토리·파일명 매핑 분리 미흡
Solution: p_dir/p_file 분리 매핑으로 raw/<원본디렉토리>/<원본파일명> 규칙 고정

ML 대시보드 NULL/이상치 문제 (2026-04-14)

Problem: training_data_count, f1/r2/rmse 등 지표가 NULL 또는 비정상값
Cause: metric key 매핑 협소, source 탐색 제한, Best Run/Trend 집계식 취약
Solution: params/tags/run_metrics_history fallback 확장 + key 탐지 규칙 강화 + Best Run 정렬식(R2 DESC, RMSE ASC) 보정

운영 장애 감지 공백 (2026-04-13)

Problem: 실패 발생 시 통합 알림 체계 부재
Cause: 플랫폼별 실패 이벤트가 분산되어 즉시 감지 어려움
Solution: Logic App Webhook 기반 공통 알림 훅 표준화 + 테스트 추가 + GCP/ADF/Databricks 운영 가이드 정리


내가 담당한 부분

  • Azure Databricks Account 관리 및 대시보드 구현
  • Azure Factory 구성, GCP Bucket, Cloud Function 생성 및 연결
  • Azure Function-Blob(ADLS)-AAC-ADB 데이터 파이프라인 구현
  • Logic App으로 데이터 파이프라인 실패 시 이메일 알림기능 구현

추가로 배운 부분(Azure 비용적 관점)

  • databricks 컴퓨팅 생성하면 azure 파생 그룹이 발생 → 클라우드 관리자에게 요청하여 해당 그룹으로 포함 요청하여 가시성을 얻어야 토탈 요금 확인 가능(기존 리소스그룹 요금 + databricks전용 리소스그룹 요금)
  • 작업 시작 전 항상 git pull --rebase origin main, 푸시 직전 다시 git fetch 후 필요 시 git pull --rebase origin main, main에서는 merge commit 안 만들고 rebase/fast-forward만 사용하여 브랜치 히스토리를 깔끔하게
profile
성장하기 위한 기록

0개의 댓글