Find Security Bugs

개요

버그 및 보안취약점 등 정적 소스코드 분석이 가능한 오픈소스로 FindSecurityBugs를 추가할 수 있다.

설명

FindSecurityBugs는 Philippe Arteau애서 만든 자바 웹 애플리케이션에 대한 보안 감사를 지원하는 플러그인이다.

2022년 4월에 최신 버전 1.12.0 버전이 배포되었고 특징은 다음과 같다.

* 823개 이상의 고유 API 시그니처를 가진 141개의 다른 취약성 유형을 검출 가능
* Spring-MVC, Struts, Tapestry등 다양한 소프트웨어 개발 프레임워크를 지원
* Eclipse, IntelliJ, Android Studio, NetBeans 등 통합개발환경(IDE) 도구에 플러그인으로 활용 가능, Ant와 Maven에선 커맨드라인으로 활용 가능
* Jenkins와 SonarQube와 같은 CI(Continuous Integration) 도구에서 활용 가능
* OWASP TOP 10과 CWE를 커버하는 광범위한 참조 제공
* FindSecurityBugs는 오픈소스이며 contributions에 열려있음

공식 홈페이지인 https://find-sec-bugs.github.io/ 를 통해 소프트웨어에 대한 소개와 튜토리얼을 제공하고 있으며, LGPL 공개소프트웨어 라이선스에 따라 소프트웨어 다운로드 기능을 제공한다.

행정안전부 47개 보안약점 관련 FinSecurityBugs 기존 탐지 룰(Detector)

보안 항목 관련 Detector 룰설명
SQL 삽입  SqlInjectionDetector AndroidSqlInjectionDetector  SQL문의 입력값이 고정된 값이 아니고 PreparedStatement를 사용하지 않는 경우 검사
경로 조작 및 자원 삽입 PathTraversalDetector File, FileWriter 등을 외부에서 들어온 값을 통해 사용하는 경우
크로스사이트 스크립트 XssServletDetector XssMvcApiDetector XssTwirlDetector XssJspDetector 스크립트가 사용되기 전에 입력 값이 신뢰할 수 없는 소스에서 온 것인지 확인 
운영체제 명령어 삽입 CommandInjectionDetector  운영체제 명령어를 환경 변수를 통해 받아오는 경우 탐지 
위험한 형식 파일 업로드 FileUploadFilenameDetector 신뢰할 수 없는 소스를 이용한 ServletFileUpload 탐지 
신뢰되지 않는 URL 주소로 자동 접속 연결  UnvalidatedRedirectDetector SpringUnvalidatedRedirectDetector PlayUnvalidatedRedirectDetector 신뢰할 수 없는 소스를 이용한 sendRedirect 사용 탐지
XQuery 삽입 XQueryInjectionDetector  XQuery 문을 외부 입력값을 이용해 compile하는 경우 탐지 
XPath 삽입 XPathInjectionDetector  XPath 문을 외부 입력값을 이용해 compile 또는 evaluate하는 경우 탐지 
LDAP 삽입 LdapInjectionDetector LDAP 필터를 외부 입력값을 이용해 구성하고 search하는 경우 탐지 
크로스사이트 요청 위조 SpringCsrfProtectionDisabledDetector  CSR 방어가 비활성화 되어 있는 경우 탐지
HTTP 응답분할  HttpResponseSplittingDetector  외부 입력 값을 통해 addHeader(), setHeader() 등의 메소드 사용 탐지 
보안기능 결정에 사용되는 부적절한 입력값  ServletEndpointDetector  신뢰할 수 없는 소스에서 불러온 값을 사용하는 경우 탐지 
포맷스트링 삽입  FormatStringManipulationDetector  신뢰할 수 없는 값을 포맷팅하는 경우 탐지 
부적절한 인가  InsecureSmtpSslDetector  보안 기능이 고려되지 않은 API를 사용하여 인증없이 연결하는 경우 탐지 
중요한 자원에 대한 잘못된 권한 설정 ExternalFileAccessDetector CookieFlagsDetector PersistentCookieDetector  보안 기능이 비활성화된 쿠키를 사용하는 경우 탐지 
취약한 암호화 알고리즘 사용  CustomMessageDigestDetector PotentialValueDetector DesUsageDetector TDesUsageDetector RsaNoPaddingDetector CipherWithNoIntegrityDetector 취약하다고 알려진 암호화 알고리즘 사용 탐지
중요정보 평문저장 UnencryptedSocketDetector UnencryptedServerSocketDetector 암호화되지 않는 소켓, 서버 소켓 사용 탐지
중요정보 평문전송 UnencryptedSocketDetector UnencryptedServerSocketDetector  암호화되지 않는 소켓, 서버 소켓 사용 탐지
하드코드된 비밀번호DumbMethodInvocations ConstantPasswordDetector  데이터베이스의 비밀번호가 고정 값이거나 특정 메소드(setProperty)의 인자값을 고정 값으로 사용하는 경우 탐지
충분하지 않은 키 길이 사용 InsufficientKeySizeBlowfishDetector InsufficientKeySizeRsaDetector  암호화 알고리즘의 권장 키 길이 미만인 경우 탐지
적절하지 않은 난수 값 사용 PredictableRandomDetector  적절하지 않다고 알려진 난수 생성 메소드 사용 탐지
하드코드된 암호화 키 ConstantPasswordDetector 하드코드된 암호화 키 사용 탐지
사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 PersistentCookieDetector  매우 긴 수명을 가진 쿠키 사용 탐지 세션 만료 시간이 부적절한 경우
솔트 없이 일방향 해쉬 함수 사용 PotentialValueDetector  Update를 통해 솔트 값을 업데이트하지 않는 경우 검사
무결성 검사없는 코드 다운로드 FileDisclosureDetector SSRFDetector  외부에서 받은 값을 검사 없이 그대로 실행하는 경우 탐지
오류메세지 통한 정보 노출 ErrorMessageExposureDetector  스택 정보가 유출되는 경우 탐지
잘못된 세션에 의한 데이터 정보 노출 ServletEndpointDetector  클라이언트에 의해 변조될 수 있는 세션 ID를 사용하는 경우 탐지
시스템 데이터 정보 노출 SSRFDetector FileDisclosureDetector  예외 처리에서 시스템 데이터가 노출되는 경우 탐지
DNS lookup에 의존한 보안 결정 ServletEndpointDetector  getServerName() 또는 getHeader(“Host”)를 사용해 호스트의 이름을 사용하는 경우 탐지
취약한 API 사용 UnencryptedSocketDetector  암호화되지 않은 Socket 사용 탐지

설치

Spotbugs 설치

(참고 : 표준프레임워크 통합개별환경은 이미 설치되어있음)

1. Help > Eclipse MarketPlace...를 선택한다.



2. Find 창에서 Spotbugs를 검색하고 install 한다.

설정

1. https://find-sec-bugs.github.io/ 에서 플러그인을 다운로드 받는다.


2. Eclipse > Windows > Prefeneces > Spotbugs 선택== [Reporting configuration]탭의 [Reported (Visible) bug categories]목록에서 [Security]만 체크되어 있는지 확인한다.


3. [ Plugins and misc . settings ]섹션에 보안 버그 검색 플러그인을 추가할 수 있다. Add… 클릭하여 다운로드 받은 findsecbugs-plugin.jar 파일을 선택한다.
플러그인이 추가되어있는지 확인하고 Apply and Close 버튼을 클릭하여 플러그인 설치를 완료한다.



✔ 설치가 제대로 되지 않았다면 이클립스를 다시 시작한다.


4. 다시 Spotbugs Preference창을 열어서 Detector configuration 탭을 선택한다. FindSecurityBugs의 룰셋들이 추가된 것을 확인할 수 있다.


✔ detector 목록에서 Category 탭을 클릭하면 Category 순서로 정렬된다.
✔ 체크박스를 해제하면 제외하고 싶은 일부의 detector를 실행 중지할 수 있다.

실행

1. 분석하려는 프로젝트 또는 패키지를 선택하고 마우스 오른쪽 버튼 클릭, Spotbugs > Findbugs를 선택한다.


✔ 이클립스의 Package Explorer에서 특정 파일을 선택하고 진행하면 특정 파일만 분석이 가능하다.
✔ 기존에 분석한 내용을 깨끗하게 지우고 다시 분석하려면 마우스 오른쪽 버튼 클릭, Spotbugs > Clear Bug Marker를 선택한다.

결과 확인

1. Windows > Perspective > Open Perspective > Other.. 선택 또는 오른쪽 상단의 돋보기 버튼을 클릭하여 Spotbugs Perspective 창을 연다.


2. Bug Explorer에 분석 단위별 버그 심각도와 항목별 목록이 나타난다.


✔ 검출된 버그를 더블클릭하면 버그가 발견된 소스라인으로 이동한다.
✔ Bug Info 탭에서 검출된 버그에 대한 정보를 확인할 수 있다.

개발환경의 보안 항목별 관련 률 보유 여부

보안 항목 Spotbugs FindSecurityBugs PMD
입력 데이터 검증 및 표현
SQL Injection
코드 삽입
경로 조작 및 자원 삽입
XSS (Cross Site Scripting)
운영체제 명령어 삽입)
위험한 형식 파일 업로드
신뢰되지 않는 URL 주소로 자동접속 연결
부적절한 XML 외부개체 참조
XML 삽입
LDAP 삽입
크로스사이트 요청 위조
서버사이드 요청 위조
HTTP 응답분할
정수형 오버플로우
보안기능 결정에 사용되는 부적절한 입력값
포맷 스트링 삽입
보안기능
적절한 인증 없는 중요기능 허용
부적절한 인가
중요한 자원에 대한 잘못된 권한 설정
취약한 암호화 알고리즘 사용
암호화되지 않은 중요정보
하드코드된 중요정보
충분하지 않은 키 길이 사용
적절하지 않은 난수값 사용
취약한 비밀번호 허용
부적절한 전자서명 확인
부적절한 인증서 유효성 검증
사용자 하드디스크에 저장되는
쿠키를 통한 정보노출
주석문 안에 포함된 시스템 주요정보
솔트없이 일방향 해쉬함수 사용
무결성 검사 없는 코드 다운로드
반복된 인증시도 제한 기능 부재
시간 및 상태
경쟁조건: 검사시점과 사용시점
종료되지 않는 반복문 또는 재귀함수
에러 처리
오류 메시지를 통한 정보노출
오류 상황 대응 부재
부적절한 예외 처리
코드 오류
Null Pointer 역참조
부적절한 자원 해제
신뢰할 수 없는 데이터의 역직렬화
캡슐화
잘못된 세션에 의한 데이터 정보노출
제거 되지 않고 남은 디버그 코드
Public 메소드로부터 반환된 Private 배열
Private 배열에 Public 데이터 할당
API 오용
DNS lookup에 의존한 보안결정
취약한 API 사용

표준프레임워크 예제 포함된 보안 항목

보안 항목 표준프레임워크
예제 포함
위키가이드
참조 추가
비고
입력 데이터 검증 및 표현
SQL Injection
코드 삽입
경로 조작 및 자원 삽입 2018년 공통컴포넌트
취약점 패치 내용
XSS (Cross Site Scripting)
운영체제 명령어 삽입) 2023년 공통컴포넌트
취약점 패치 내용
위험한 형식 파일 업로드
신뢰되지 않는 URL 주소로 자동접속 연결 2019년 공통컴포넌트
보안 패치 (화이트 리스트)
부적절한 XML 외부개체 참조
XML 삽입
LDAP 삽입
크로스사이트 요청 위조 Spring Security 설정
간소화 서비스
서버사이드 요청 위조
HTTP 응답분할
정수형 오버플로우
보안기능 결정에 사용되는 부적절한 입력값
포맷 스트링 삽입
보안기능
적절한 인증 없는 중요기능 허용
부적절한 인가
중요한 자원에 대한 잘못된 권한 설정
취약한 암호화 알고리즘 사용 2018년 공통컴포넌트
취약점 패치 내용
암호화되지 않은 중요정보
하드코드된 중요정보 Crypto 간소화 서비스
충분하지 않은 키 길이 사용
적절하지 않은 난수값 사용
취약한 비밀번호 허용
부적절한 전자서명 확인
부적절한 인증서 유효성 검증
사용자 하드디스크에 저장되는
쿠키를 통한 정보노출
주석문 안에 포함된 시스템 주요정보
솔트없이 일방향 해쉬함수 사용
무결성 검사 없는 코드 다운로드
반복된 인증시도 제한 기능 부재
시간 및 상태
경쟁조건: 검사시점과 사용시점
종료되지 않는 반복문 또는 재귀함수
에러 처리
오류 메시지를 통한 정보노출
오류 상황 대응 부재
부적절한 예외 처리
코드 오류
Null Pointer 역참조
부적절한 자원 해제
신뢰할 수 없는 데이터의 역직렬화
캡슐화
잘못된 세션에 의한 데이터 정보노출
제거 되지 않고 남은 디버그 코드
Public 메소드로부터 반환된 Private 배열
Private 배열에 Public 데이터 할당
API 오용
DNS lookup에 의존한 보안결정
취약한 API 사용

참고사이트

 
egovframework/dev4/findsecuritybugs.txt · 마지막 수정: 2024/03/11 02:28 작성자 com
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki