소스코드 진단
웹애플리케이션 취약점 진단은 크게 동적진단과 정적진단(소스코드진단)으로 나뉩니다. 두 진단의 가장 큰 차이는 "소스코드(정답지) 보고 진단하느냐?" 입니다.
동적진단
장점: 상대적으로 진단 소요기간이 적다.(1 url 2~3day | 1주~2주)
단점: 누락의 가능성이 상대적으로 높다.
정적진단
장점: 보다 깊이 있고 상세한 진단이 가능하다.
단점: 시간이 오래 걸린다.(1서비스 1url 최소 2주~수개월)
진단자 역량에 따라 결과 산출물의 품질이 달라진다.(편차가 상대적으로 크다)
소스코드 진단 목적
소스코드를 활용하여 애플리케이션 내 모든 입/출력 값에 대한 Data Tracing을 통해 취약점 누락 최소화 및 상세 취약점 점검을 수행하여 보안 수준을 향상시키는데 목적을 둡니다.
소스코드 진단 특징
- 기존 동적 진단 대비 깊이 있는 진단 수행 및 다양한 케이스 도출이 가능합니다.
- 소스코드 자동화도구(AppScan, Fortify 등) 대비 과/오탐 비율이 적습니다.
- 개발 언어에 관계없이 모든 분석이 가능합니다. (입/출력 Data Tracing)
- 취약점 다포인트 리스트 업 방식을 통한 누락률 최소화
- 입/출력 분석을 통한 상세 서비스 분석이 가능
- 진단자 역량에 따라 산출물 품질이 결정됨
소스코드 진단 방식
자동화 솔루션
- app scan/fortify 등 사용
- 결과 보고서 자동으로 산출됩니다.
- 장점 : 간편하고, 시간소요가 적습니다.
- 단점 : 과/오탐 비율이 크고, 솔루션을 잘 이해하고 있는 엔지니어(진단자)가 필요합니다.
수동진단
- 사람이 직접하는 방식
- 장점 : 도출한 취약점에 대한 결과가 명확합니다.
- 단점 : 시간이 오래 걸리고, 진단자에 대한 결과물 품질의 편차가 큽니다.
소스코드 진단 과정
입/출력 Tracing을 하는 이유는 진단자가 코드가 어떻게 작동되는지를 알아야 여러가지 공격을 수행해 보고 어느 부분에서 필터링을 해야하는지 알 수 있기 때문입니다. 또한 개발유형을 파악하고, 서비스가 어떻게 돌아가는지를 확인하기 위함입니다.
환경분석
서버유무, IP, OS, WEB, WAS, DBMS, Open Port, Default Page, Framework, Editor, 개발언어, Open Source...
RawData
개요 및 목적
- 전달받은 모든 소스를 확인하여 분석할 경우 시간이 오래 걸리기 때문에 빠른 시간 내 전체 입/출력 Data를 식별/분석하기 위함
- 개발 유형 파악을 통해 개발자가 의도한 입/출력 및 환경 구성을 빠르게 파악하기 위해 고안된 방법
- 애플리케이션이 가진 모든 입/출력을 파악하기 위함
Data 및 키워드 정의
- 개발자 코딩 유형 분석 : GET(입력-가져오기), SET(초기화, 변수세팅, 출력), IN(입력), OUT(출력) 등
- SQL DB 공통 정의 : SELECT / INSERT / UPDATE / DELETE
- 웹 프레임워크 : MVC 구조 파악(Model, View, Controller, request, response)
키워드 추출 시 고려사항
- 개발 유형 분석 단계에서 함수나 변수의 정형화된 키워드 검색은 지양 넓은 범위의 키워드 선택
- 키워드 길이에 따라 Data 검색 결과가 상이
소스코드 분석방법
입력 > 입력 처리 > DB 처리 > 출력 처리 > 출력
- 개발자 별 각기 다른 스타일로 개발이 구현되어 있기 때문에 진단자가 서비스 기능에 목적을 두고 분석할 경우, 소스코드를 파악하기 어렵기 때문에 애플리케이션에서 Data Tracing(흐름)을 추적하여 서비스를 분석해야합니다.
- 입출력 RawData 작성을 통해 파악된 유형을 추적해야하며, 소스코드만 가지고 분석이 어려울 경우, 실제 서비스에 접근하여 동적(proxy)으로 추가 정보를 수집해야합니다.(동적 분석과 정적 분석을 통해 상호보완이 필요)
- 입/출력 Tracing 및 개발자 유형 파악이 완료된 이후에는 좁은 범위의 키워드 검색이 필요합니다.