TL;DR
- 파이썬 보안 검사에서 AST 기반 패턴 분석은 빠르고 실용적이며, 오염 분석은 인젝션 취약점 탐지에 더 강력할 수 있지만 구현과 적용이 복잡함.
- AST 기반 분석은 파이썬 코드를 추상 구문 트리(AST)로 변환해 위험한 구문 패턴을 찾으며, 빠르고 결정적이고 신뢰도가 높음.
- 오염 분석은 신뢰할 수 없는 입력이 소스에서 싱크까지 이동하는 경로를 추적해 적절한 정제나 검증이 없는 경우를 탐지함.
- 파이썬의 동적 기능과 프레임워크 동작 때문에 정밀한 정적 추론은 어렵고, 여러 파일과 함수에 걸친 오염 추적은 특히 까다로움.
- 완벽한 정적 분석 도구는 없으므로 자동 검사에만 의존하지 말고, 보안 설계와 심층 방어를 함께 적용해야 함.
AST 기반 분석이란?
- AST 기반 분석은 파이썬 코드를 추상 구문 트리(AST)로 파싱한 뒤 알려진 비보안 구문 패턴과 대조함.
- 대표적인 탐지 대상은 다음과 같음.
eval(),exec(),compile()등 위험한 내장 함수 호출shell=True를 사용한 경우와 같은subprocess모듈의 비보안 사용- 하드코딩된 비밀값, 취약한 암호화 알고리즘, 안전하지 않은 직렬화(
pickle,yaml.load) - 코드 형태만으로 식별할 수 있는 기타 지역 코드 패턴
- 파이썬 표준
ast모듈이 생성하는 구문 트리를 직접 사용하므로 빠르고 결정적이며, 파이썬 코드의 보안 약점을 찾는 데 높은 신뢰도를 보임.
오염 분석이란?
- 오염 분석은 신뢰할 수 없는 데이터, 즉 오염된 데이터가 소스에서 할당, 함수 호출, 변환을 거쳐 싱크에 도달하는 흐름을 추적함.
- 소스의 예:
request.args, 파일 읽기, 환경 변수, 네트워크 입력 - 싱크의 예: SQL 실행, 명령 실행, HTML 렌더링, 파일 시스템 작업
- 오염된 데이터가 충분히 정제되거나 검증되지 않은 채 싱크에 도달하는 경로를 탐지함.
- 오염 분석은 프로그램 내 신뢰할 수 없는 데이터의 흐름을 추적해 취약점 예방 조치가 올바르게 적용됐는지 확인하려는 방법임.
- 핵심 질문은 공격자가 제어하는 입력이 위험한 작업에 영향을 줄 수 있는지 여부임.
주요 관찰 사항
- 파이썬의 동적 기능은 완전하고 정밀한 정적 추론을 어렵게 함.
- 덕 타이핑, 늦은 바인딩,
getattr/setattr, 데코레이터, 메타클래스, 일급 함수,*args/**kwargs, 동적 임포트 - Flask, Django, FastAPI의 요청 처리, ORM, 의존성 주입 등 프레임워크의 마법 같은 동작
- 여러 함수와 파일을 넘나드는 오염 추적은 일반적인 방식으로 정확하게 구현하기 특히 어려움.
- 여러 파이썬 정적 애플리케이션 보안 테스트(SAST) 도구의 성능을 편향 없이 공개 평가하는, 널리 채택되고 바로 사용할 수 있는 공개 테스트 모음은 없음.
- 따라서 연구 평가는 합성 벤치마크나 제한된 실제 CVE 모음에 의존함.
- 어떤 방법도 완벽하지 않으며, 적절한 선택은 사용 맥락, 위험 감수 수준, 성능 제약, 유지보수 역량에 따라 달라짐.
- 모든 파이썬 코드베이스에 적합한 완벽한 오픈소스 또는 상용 SAST 스캐너는 없음.
- 도구 제작자는 유지보수성, 사용성, 성능, 정적으로 탐지할 수 있는 결함 유형의 범위 사이에서 지속적으로 균형을 맞춰야 함.
비교: AST 기반 검사와 오염 분석
요약
- AST 기반 검사는 단순하고 빠르며 파이썬 코드의 흔한 약점을 효과적으로 탐지함.
ast기반 보안 도구와 제어 기능은 유지보수가 간단하고 실무에서도 효과적인 경향이 있음.- 오염 분석은 특히 인젝션 결함처럼 중요한 취약점을 찾는 데 이론적으로 더 강력함.
- 그러나 일반적인 파이썬 코드를 대상으로 정확하게 구현하기는 복잡하며, 실행 속도가 느린 경우가 많고 상당한 설정이 필요하며, 언어의 동적 특성 때문에 분석이 불완전함.
- Python Code Audit은 AST 패턴을 핵심으로 사용하며, 제한된 사용 사례에 오염 분석도 적용하도록 확장 중임.
- 어떤 도구도 완벽하지 않으므로 자동 코드 검사에만 의존하지 않고, 강력한 아키텍처와 보안 설계 접근법을 결합한 심층 방어를 적용해야 함.
파이썬 보안 핸드북
- 이 글은 무료 Python Security Handbook의 내용을 바탕으로 작성됨.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요