Magika와 OpenAI를 활용한 파일 탐지 및 보안 분석 파이프라인 구축
이 튜토리얼에서는 구글의 딥러닝 기반 파일 타입 탐지 도구인 Magika와 OpenAI의 언어 모델을 결합하여 실용적인 파일 보안 분석 파이프라인을 구축하는 방법을 다룹니다. 파일 확장자가 아닌 원시 바이트(Raw bytes)를 기반으로 파일의 진짜 형식을 식별하고, GPT 모델을 통해 기술적인 분석 결과를 이해하기 쉬운 보안 인사이트와 요약으로 제공합니다. 이를 통해 대량의 파일 스캔, 변조된 파일 탐지, 업로드 리스크 스코어링 등 실무적인 보안 검역 시스템을 구축할 수 있습니다.
인공지능(AI) 인프라 기술, AI 쇼츠, 애플리케이션, 에디터 추천, 머신러닝, 보안, 소프트웨어 엔지니어링, 스태프 튜토리얼
이 튜토리얼에서는 Magika의 딥러닝 기반 파일 타입 탐지 기능과 OpenAI의 언어 지능을 결합하여 실용적이고 통찰력 있는 분석 파이프라인을 구축하는 워크플로우를 만듭니다.
먼저 필요한 라이브러리를 설정하고 OpenAI API에 안전하게 연결한 뒤, 파일 이름이나 확장자에 의존하지 않고 원시 바이트(raw bytes)에서 직접 파일을 분류하도록 Magika를 초기화합니다.
튜토리얼을 진행하면서 일괄 스캔(batch scanning), 신뢰도 모드(confidence modes), 위장 파일(spoofed-file) 탐지, 포렌식 스타일 분석, 업로드 파이프라인 위험도 평가(risk scoring), 구조화된 JSON 보고서 생성 등을 살펴봅니다.
각 단계에서 GPT를 사용하여 기술적인 스캔 결과를 명확한 설명, 보안 통찰력, 경영진 수준의 요약으로 번역함으로써 저수준 바이트 탐지를 의미 있는 실제 해석과 연결할 수 있습니다.
코드 복사 완료 다른 브라우저를 사용하세요!
pip install magika openai -q 코드 실행
os, io, json, zipfile, textwrap, hashlib, tempfile, getpass 모듈을 가져오고, pathlib에서 Path를, collections에서 Counter를 가져옵니다. magika에서 Magika 모듈과 MagikaResult, PredictionMode 타입을 가져오며, openai에서 OpenAI를 가져옵니다.
"🔑 OpenAI API 키를 입력하세요 (입력값은 숨겨집니다):"를 출력합니다. getpass를 통해 OpenAI API 키를 입력받아 client 객체를 생성합니다.
client.models.list()를 시도해보고, 성공하면 "✅ OpenAI 연결 성공"을 출력합니다. 실패할 경우 예외를 처리하여 "❌ OpenAI 연결 실패"와 함께 시스템을 종료합니다.
Magika 객체를 생성하여 m에 할당하고, 모듈 버전, 모델 이름, 지원하는 출력 콘텐츠 타입의 개수 등을 출력하며 로드를 성공적으로 완료합니다.
ask_gpt라는 함수를 정의합니다. 이 함수는 시스템 프롬프트와 사용자 프롬프트를 받아 GPT-4o 모델을 사용해 응답을 생성하고, 그 결과의 텍스트를 반환합니다.
"=" * 60 "섹션 1 — 핵심 API 및 GPT 평이한 언어 설명" "=" * 60
Python, JavaScript, CSV, JSON, Shell, PDF magic, ZIP magic 등 다양한 형식의 샘플 바이트 데이터를 딕셔너리로 정의합니다.
라벨, MIME 타입, 점수(Score)를 출력하는 헤더를 표시합니다.
각 샘플 데이터를 순회하며 m.identify_bytes를 통해 원시 바이트를 식별하고, 그 결과 라벨을 magika_labels 리스트에 추가합니다. 식별된 라벨, MIME 타입, 점수를 출력합니다.
ask_gpt 함수를 사용하여 Magika가 식별한 파일 타입 목록을 바탕으로, 딥러닝 모델이 어떻게 원시 바이트만으로 파일 타입을 탐지하는지, 그리고 파일 확장자에 의존하는 것보다 왜 더 나은지를 간결한 머신러닝 엔지니어의 시점에서 설명을 요청하고 그 결과를 출력합니다.
"=" * 60 "섹션 2 — 일괄 식별 및 GPT 요약" "=" * 60
임시 디렉토리를 생성하고, Python, CSS, JSON, Shell, HTML, YAML, SQL, Markdown 등 다양한 확장자를 가진 파일 스펙들을 정의합니다. 경로를 저장할 빈 리스트(paths)를 초기화합니다.