FindBugs와 FindSecurityBugs를 이용한 정적분석
FindBugs 설치 URL http://findbugs.cs.umd.edu/eclipse
FindSecurityBugs 다운로드 URL
http://h3xstream.github.io/find-sec-bugs/download.htm
FindBugs는 자바 바이트 코드(byte code)를 분석하여 버그 패턴을 발견하는 정적분석 공개소프트웨어이다(GNU LGPL 라이센스를 적용). 미국의 Maryland 대학에서 2006년에 개발하였으며 Java 프로그램에서 발생 가능한 100여개의 잠재적인 에러에 대해 4개등급( scariest, scary, troubling, concern)으로 구분하여 탐지하고, 그 결과를 XML 로 저장할 수 있도록 지원한다.
Linux, Windows, MacOSX 운영체제를 지원하며, GUI기반의 단독 실행(Stand alone) 응용프로그램 방식과 Eclipse, NetBeans, IntelliJ IDEA, Gradle, Hudson and Jenkins와 같은 IDE(통합개발환경)의 플러그인(Plug-in) 방식을 지원한다. FindBugs 설치를 위해서는 512MB 이상의 메모리와 Java 2 Standard Edition, 1.5 버전 이상이 요구되며, 공식 웹사이트(http://findbugs.sourceforge. net)에서 다운로드 받을 수 있다.
Bad practice, Correctness, Dodgy code, Experimental, Internationalization, Malicious code vulnerability, Multithreaded correctness, Performance, Security 등 9개 이상의 카테고리와 400개가 넘는 진단 규칙을 제공하며, 룰셋(ruleset)의 커스터마이징을 통해 각 기업의 소프트웨어를 진단하기위한 최적화를 수행할 수 있다.
Find Bugs 3.0.1에서 제공하는 탐지유형
번호 | 탐지 유형 | 사례 및 설명 |
1 |
Bad practice |
클래스 명명규칙, null 처리 실수 등 개발자의 나쁜 습관을 탐지 |
2 |
Correctness |
잘못된 상수, 무의미한 메소드 호출 등 문제의 소지가 있는 코드를 탐지 |
3 |
Dodgy code |
int의 곱셈결과를 long으로 변환하는 등 부정확하거나 오류를 발생시킬 수 있는 코드를 탐지 |
4 |
Experimental |
메소드에서 생성된 stream이나 리소스가 해제하지 못한 코드를 탐지 |
5 |
Internationalization |
Default 인코딩을 지정하지 않은 경우 등 지역특성을 고려하지 않은 코드 탐지 |
6 |
Malicious codevulnerability |
보안 코드에 취약한 가변적인 배열이나 콜렉션, Hashtable 탐지 |
7 |
Multithreaded correctness |
멀티쓰레드에 안전하지 않은 객체 사용 등을 탐지 |
8 |
Performance |
미사용 필드, 비효율적 객체생성 등 성능에 영향을 주는 코드를 탐지 |
9 |
Security |
CSS, DB 패스워드 누락 등 보안에 취약한 코드를 탐지 |
FindSecurityBugs는 자바 웹 어플리케이션에 대한 보안 감사를 지원하는 FindBugs 의 플러그인으로, Philippe Arteau에 의해 만들어졌다.
Spring-MVC, Struts, Tapestry 등 다양한 SW 개발 프레임워크와 Eclipse, IntelliJ, Android Studio, NetBeans등 통합개발환경(IDE)도구, Jenkins와 SonarQube와 같은 CI(Continuous integration) 도구에서 활용가능하다.
200개 이상의 시그니처를 활용하여 OWASP TOP 10과 CWE를 커버하는 78개의 버그패턴(Bug Pattern)을 탐지할 수 있으며, 공식 홈페이지(http://find-sec-bugs.github.io)를 통해 사용방법과 소프트웨어를 다운로드 받을 수 있다.
FindSecurityBugs 탐지 유형
번호 | 탐지유형 | 사례 및 설명 |
1 |
부적절한 입력 탐지 |
Untrusted Servlet parameter, session Cookie, Query String 등 |
2 |
SQL Injection 탐지 |
Hibernate, JDO, JPA, Spring JDBC,LDAP Injection 등 |
3 |
XSS |
JSP, Servlet, JavaScript(Android) XSS를 탐지 |
4 |
취약한 암호화 알고리즘 |
SHA-1, MD2/MD4/MD5 또는 NullCipher 등 취약한 암호화 함수를 탐지 |
5 |
취약한 URL Redirection |
유효하지 않은 URL로 Redirection 취약점 탐지 |
6 |
기타 | 보안 플래그가 없는 쿠키, Regex DOS 취약점, 신뢰할 수 없는 Context-type 또는 헤더 |
'보안 > 시큐어코딩' 카테고리의 다른 글
설계단계 실습LAB (0) | 2017.10.16 |
---|---|
[안랩] 개발보안진단 및 프로세스 수립 컨설팅 (0) | 2017.07.22 |
진단보고서 양식 (0) | 2016.07.14 |
안드로이드 애플리케이션 시큐어디자인/시큐어코딩 가이드북 (0) | 2016.06.17 |
보안약점(Wleakness) 와 보안취약점(Vulnerability) (0) | 2016.06.15 |