최근 지속적으로 발생되고 있는 웹 해킹 관련 침해사고에 대한 대안으로 시큐어코딩(Secure Coding)이 강조되고 있다. 시큐어코딩이란 개발 단계에서부터 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하여 외부 공격으로부터 안전한 어플리케이션을 개발하는 것을 말한다. 지난 201212월부터는 행정자치부의 정보시스템 구축 운영 지침 개정안 행정 예고에 따른 시큐어코딩 의무화 법안이 발표되었다. 하지만 이와 같은 법안이 나왔음에도 불구하고 침해 사고는 좀처럼 줄어들지 않는 것이 현실이다.


개발자 입장에서도 마찬가지로 보안 취약점(hole)의 존재를 찾아 보완하는 일이 쉽지는 않을 것이다. 개발 단계에서부터 시큐어코딩을 하였더라도 문자열 필터링 우회 기법, 인코딩 또는 암호화를 통한 공격 기법들은 점차 진화하고 있으므로 이를 안심할 수 없다.


이와 같은 문제의 해결을 돕기 위해 나온 도구가 몇가지 존재한다. 이번에 소개할 도구는 소스코드 진단 도구 ‘Yasca’이다. ‘Yasca’ 2007년도 ‘Michael Scovetta’라는 개발자에 의해 개발되었으며, 이 도구는 개발자가 애플리케이션을 올바르게 제작할 수 있도록 소스코드에 대한 보안 취약점 및 품질 향상에 도움을 줄 수 있는 오픈 소스 도구이다. 시큐어코딩과 관련된 다양한 플러그인을 지원하며, 확장성이 뛰어나 개발자들이 선호하는 도구 중 하나이다.

[그림 1] Source Code Analysis Tool - Yasca


공식 홈페이지

http://www.scovetta.com/yasca.html

다운로드 URL

https://sourceforge.net/projects/yasca

http://scovetta.github.io/yasca/ (최신)

[1] Yasca 공식 홈페이지 및 다운로드 URL

 

아래 [1]‘Yasca’ 사용을 위한 시스템 권고 사양이다. 유료 상용 도구에 비해 사양이 높지 않은 편이지만, 플러그인 옵션을 많이 적용할 시에는 상당한 자원과 시간이 요구될 수 있다.

운영체제

Microsoft Windows 2000 or Later

어플리케이션

Java JRE(or JDK) v 1.4 Later (required for PMD)

하드웨어

At least 512MB RAM (1 + GB suggested)

[2] Yasca 환경 시스템 권고 사양


‘Yasca’는 기본적으로 소스파일을 하나씩 분석하지만, ‘resource’ 옵션을 추가해 연관성을 가진 소스파일들을 한꺼번에 분석할 수 있다. 이외에도 옵션을 사용하여 디버깅 기능, 보고서 형식 변경, 스캔 수준 설정, 진단 제외 파일 지정 등의 기능을 사용할 수 있다. 이와 같은 옵션에 대한 설명은 아래 [3]에서 확인할 수 있다.

옵션

설명

--debug

디버깅 기능 추가

-d “QUERYSTRING”

Yasca의 하위 구성 요소에 쿼리 문자열을 전달

--help

도움말 페이지 보기

-i –ignore-ext EXT,EXT

추가된 파일확장자는 진단할 시에 제외

-i –ignore-file FILE

추가된 파일은 진단할 시에 제외, 지정된 xml파일로부터 파일명에 해당되는 것은 제외하고 결과를 출력

-i, --source-required

가능한 소스코드 결과들만 보여줌

-f, --fixes FILE

사용될 파일만 선택함

-l –level LEVEL

소스코드 스캔 수준 레벨 (1-5이며, 기본은 5로 설정)

-o –output FILE

디렉토리 위치 설정 및 보고서 작성

(기본 설정은 특정 파일로 Yasca 설치 디렉토리에 생성)

-p, --plugin DIR|FILE

플러그인 디렉토리 및 파일 설정

-px PATTERN [PATTERN]

플러그인 패턴추가, “PATTERN,PATTERN”과 같이 쉼표로 구분

--log FILE

로그 파일 생성

-sa, --sa_home DIR

서드 파트 플러그인들을 위한 디렉토리 지정

-r, --report REPORT

보고서 템플릿 설정 (기본은 HTMLGroupReport)

HTMLGroupReport, CSVReport, XMLReport, SQLReport, DetaildReport, ConsoleReport 형태 지원

-s, --silent

어떤 결과도 출력하지 않음

-v, --version

버전 정보 보기

[3] Yasca 주요 옵션 및 설명


‘Yasca’는 독립적으로 실행되는 플러그인들을 추가하여 그 기능을 사용할 수 있다. 사용자가 필요한 플러그인을 여러 개 추가할 수도 있지만, 스캔과 결과 노출의 시간이 비교적 많이 소비된다. ‘Yasca’를 실행할 때 추가하여 사용할 수 있는 플러그인 목록은 아래 [3]과 같다.

 

플러그인

기능

findBugs

CLASS, JAR 소스코드 검사

PMD

JSP 소스코드 검사

JLint

JAVA 소스코드 검사

Antic

C/C++ 소스코드 검사

Javascript Lint

Javascript 소스코드 검사

PHPLint

PHP4, PHP5 소스코드 검사

Cppcheck

C, C++ 소스코드 검사

Clam AV

악의적인 파일 검사

Lint4j

JAVA, CLASS 소스코드 검사

Grep

분석할 파일의 간단한 패턴을 검사

[4] Yasca 플러그인 및 설명


‘Yasca’는 사용자의 운영체제에 따라 윈도우 환경은 배치 파일(.bat), 리눅스 환경은 쉘 스크립트(.sh) 파일을 실행해야 한다. 본 테스트는 윈도우 환경에서 진행하였으며, ‘php’ 언어 기반으로 작성된 소스코드를 분석하였다. ‘Yasca’는 명령프롬프트 창(cmd)을 열어 ‘Yasca’ 디렉토리로 이동한 뒤 ‘yasca.bat’ 또는 ‘yasca’를 입력하여 실행할 수 있다. 이를 실행할 때 옵션이 존재하지 않을 경우 각 옵션에 대한 목록과 도움말, 실행 예문(Example) 등이 아래 [그림 2]와 같이 나타나게 된다.

사용 명령어

> yasca.bat

[그림 2] Yasca 도움말 및 실행 예문

 

 

본 테스트에서는 단일 소스파일 분석이 아닌 ‘resource’ 옵션을 이용하여 일괄적으로 소스파일 분석을 진행하였다. 소스파일 분석을 시작하게 되면 아래 [그림 3]과 같이 사용중인 ‘Yasca’ 버전과 스캔 경로가 나타나며, 스캔이 완료된 파일의 개수를 확인할 수 있다. 분석(Scan)이 완료되면 ‘Scan complete’ 문구가 나타난다.

사용 명령어

> yasca.bat resource C:\APM_Setup\htdocs

[그림 3] Yasca 소스코드 분석


스캔이 완료된 경우 ‘Yasca’ 디렉토리에 HTML 문서 형식으로 결과 파일이 생성되며, 해당 파일을 열어 결과를 확인할 수 있다. 주의해야 할 점은 스캔의 양이 과도하게 많을 경우 결과 파일에서 결과를 불러오는데 많은 시간이 소비되며, 비정상적으로 결과가 나타나는 경우가 발생할 수 있다. 아래 [그림 4]‘Yasca’ 디렉토리에 생성된 결과 파일과 해당 파일을 실행 시킨 후 결과를 불러오는 모습이다.

[그림 4] Yasca 소스코드 분석 결과 로드


결과 파일 문서에서 결과 로드(Load)가 완료되면 아래 [그림 5]와 같은 모습이 나타난다. 결과는 위험도(Severity), 플러그인(Plugin), 분류(Category), 설명(Message), 상세내용(Details)으로 분류되어 나타난다.

 

상세 내용(Details)에서는 소스 파일의 경로와 발견 취약점이 몇 번째 줄에 위치하는지를 확인할 수 있고, 해당 소스 파일의 전체 소스코드와 취약점에 대한 설명.을 확인할 수 있다. 개발자의 경우 이처럼 간단한 스캔 과정을 거쳐 작성된 소스 코드에 취약점이 존재하는지 확인할 수 있다. 또한 사용자의 필요에 따라 플러그인을 추가해 소스 코드의 취약 여부를 파악할 수 있고, 공격이 발생될 수 있는 소스코드 보안 결함에 대한 시큐어코딩으로 소스 코드를 보완할 수 있다.

[그림 5] Yasca 소스코드 분석 결과 상세보기

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,