IT보안 학습

공개SW를 활용한소프트웨어 개발보안 점검가이드(19.06) 개념 추출

김구티2 2024. 6. 27. 19:47

Spotbugs

Spotbugs는 자바 바이트 코드(byte code)를 분석하여 버그 패턴을 발견하는 정적분석 공개소프트 웨어다. 이는 기존에 존재하던 정적분석 공개소프트웨어인 FindBugs를 계승한 프로젝트다.

 

Spotbugs에서 탐지 가능한 오류 유형

① Bad practice: 클래스 명명규칙, null 처리 실수 등 개발자의 나쁜 습관을 탐지

② Correctness: 잘못된 상수, 무의미한 메소드 호출 등 문제의 소지가 있는 코드를 탐지

③ Dodgy code: int의 곱셈결과를 long으로 변환하는 등 부정확하거나 오류를 발생시킬 수 있는 코드를 탐지

④ Experimental: 메소드에서 생성된 stream이나 리소스가 해제하지 못한 코드를 탐지

⑤ Internationalization Default: 인코딩을 지정하지 않은 경우 등 지역특성을 고려하지 않은 코드 탐지

⑥ Malicious code vulnerability: 보안 코드에 취약한 가변적인 배열이나 콜렉션, Hashtable 탐지

⑦ Multithreaded correctness: 멀티쓰레드에 안전하지 않은 객체 사용 등을 탐지

⑧ Performance: 미사용 필드, 비효율적 객체생성 등 성능에 영향을 주는 코드를 탐지

⑨ Security: CSS, DB 패스워드 누락 등 보안에 취약한 코드를 탐지

 

FindSecurityBugs

FindSecurityBugs는 자바 웹 어플리케이션에 대한 보안 감사를 지원하는 Spotbugs의 플러그인 으로, Philippe Arteau에 의해 만들어졌다.

 

FindSecurityBugs에서 탐지할 수 있는 주요 점검내용

① 부적절한 입력 탐지: Untrusted Servlet parameter, session Cookie, Query String 등

② SQL Injection 탐지: Hibernate, JDO, JPA, Spring JDBC, LDAP Injection 등

③ XSS: JSP, Servlet, JavaScript(Android) XSS를 탐지

④ 취약한 암호화 알고리즘: SHA-1, MD2/MD4/MD5 또는 NullCipher 등 취약한 암호화 함수를 탐지

⑤ 취약한 URL Redirection: 유효하지 않은 URL로 Redirection 취약점 탐지

⑥ 기타: 보안 플래그가 없는 쿠키, Regex DOS 취약점, 신뢰할 수 없는 Context-type 또는 헤더

 

PMD

PMD는 JAVA 프로그램의 소스코드(source code)를 분석하여 프로그램의 부적절한 부분을 찾아내고 성능을 높이도록 도와주는 공개소프트웨어 점검 도구로, 사용하지 않는 변수, 아무런 처리 도 하지 않은 catch block, 불필요한 Object 생성 등을 찾아내며, 시스템 개발공정의 구현 및 테스트단계에서 정적분석에 활용할 수 있다.

 

Jenkins

Jenkins는 공개소프트웨어 CI(Continuous Integration) 서버이다. 자바로 개발되어 있으며, 2015년 10월 현재 빌드와 테스트를 지원하는 1,097개의 플러그인이 제공 되는 확장성이 뛰어난 CI 도구 이다. 젠킨스는 설치의 용이성, 확장성, 가시성의 장점을 지닌다.

 

행정안전부 47개 보안약점 관련 공개SW 도구 룰(Rule) 목록

① 입력데이터 검증 및 표현: SQL 삽입, 경로 조작 및 자원 삽입, 크로스사이트 스크립트, 운영체제 명령어 삽입, 위험한 형식 파일 업로드, 신뢰되지 않는 URL 주소로 자동 접속 연결, XQuery 삽입, XPath 삽입, LDAP 삽입, 크로스 사이트 요청 위조, HTTP 응답분할, 정수형 오버플로우, 보안기능 결정에 사용되는 부적절한 입력값, 메모리 버퍼 오버플로우, 포맷스트링 삽입

② 보안기능: 적절한 인증없는 중요기능 허용, 부적절한 인가, 중요한 자원에 대한 잘못된 권한 설정, 취약한 암호화 알고리즘 사용, 중요정보 평문저장, 중요정보 평문전송, 하드코드된 비밀번호, 충분하지 않은 키 길이 사용, 적절하지 않은 난수 값 사용, 하드코드된 암호화 키, 취약한 비밀번호 허용, 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출, 주석문 안에 포함된 시스템 주요정보, 솔트 없이 일방향 해쉬 함수 사용, 무결성 검사없는 코드 다운로드, 반복된 인증시도 제한 기능 부재

③ 시간 및 상태: 경쟁조건: 검사시점과 사용시점(TOCTOU), 종료되지 않는 반복문 또는 재귀 함수

④ 에러처리: 오류 메시지를 통한 정보 노출 (시스템 데이터 정보 노출), 오류 상황 대응 부재, 부적절한 예외처리

⑤ 코드오류: 널(Null) 포인터 역참조, 부적절한 자원 해제, 해제된 자원 사용, 초기화되지 않은 변수 사용

⑥ 캡슐화: 잘못된 세션에 의한 데이터 정보 노출, 제거되지 않고 남은 디버그 코드, 시스템 데이터 정보노출, Public 메소드부터 반환된 Private 배열, Private 배열에 Public 데이터 할당

⑦ API 오용: DNS lookup에 의존한 보안 결정, 취약한 API 사용

 

 

 

728x90