본문 바로가기

테스팅

2022년 테스팅 사례 공유 - 농업0000 정보 시스템 소스코드 시큐어 코딩 분석 테스팅 지원

2022년 고품질 SW개발 컨설팅 및 테스팅 지원 사업 테스팅 사례 공유 합니다.

(재)전주정보문화산업진흥원의 SW품질역량센터에서는

2011년 부터 전라북도 ICT/SW기업을 대상으로 품질 향상을 위한 컨설팅 및 테스팅을 지원하고 있습니다.

본 테스팅 사례는 농업0000 시스템 소스코드 시큐어 코딩 분석을 지원한 사례입니다.

 

목차

 

1. 테스팅 개요

- 기업명 : 000 소프트

- 기업주소 : 전라북도 전주시 ***

- 테스팅 내용 :  농업0000 정보 시스템 소스코드 시큐어 코딩 분석 테스팅 지원

- 테스팅 목적 : 기업 개발 제품의 소스코드에 대한 보안성 테스트를 통한 보안 취약점 진단 및 가이드를 진행하고, 보안성을 강화를 통해서 고객에게 고품질 제품을 전달하기 위한 테스팅을 목표

 

2. 테스팅 일정

수 행 일 정 컨설팅 내용 담 당 자
202248() 테스팅 요청 및 신청서 접수 기업담당자
202248()
~
2022421()
시큐어 코딩 테스팅 기업담당자
테스터(JICA)
2022422() 테스팅 보고서 작성 테스터(JICA)

 

3. 테스팅 결과 요약

본 테스팅의 지원 내용은 다음과 같습니다.

 

1) 시험 환경

No 구 분 기본정보
1 사용 도구 SPARROW SCE
2 프로그래밍언어 자바
3 테스트 서버 OS Windows Server 2009
4 분석 유형 소스코드 보안 약점

 

2) 시험 장소

신청 기업 내에서 소스코드 분석 수행

 

3) 점검 항목

점검 항목은 분석하여 검출하는 기준으로서 품질 및 보안 (‘Quality’, ‘Security’) 품질 특성 기반으로 266개 항목을 설정함

순번 분류 체커 위험도 항목 내용
1 Security RELIANCE_ON_DNS_LOOKUPS_IN_A_SECURITY_DECISION 2 DNS 서버는 스푸핑 공격 대상이기 때문에 DNS명에 의존할 경우, 공격자가 DNS를 수정하여 공격자 IP주소로 도메인명을 지정할 수 있습니다.
2 Security SECURITY.CALL.REMOVE.LOOP 3 Loop 에서 바로 컬렉션의 아이템을 삭제 할 경우를 검출 합니다.
3 Security SECURITY.CALL.THROWS.FINALLY 3 메소드에서 throw 한 예외들에 대한 예외처리를 하지 않았을 경우를 검출 합니다.
4 Security SECURITY.CALL.UNLOCK 2 unlock() 메소드를 finally 블럭 내에서 호출 하지 않은 경우를 검출합니다.
5 Security SECURITY.LOOP_VARIABLE_FINAL 3 For 문에서 인스턴스를 초기화 할때 타입 앞에 final 한정자가 있는지를 검사합니다.
6 Security SECURITY.METHOD.LOCALE 2 문자열에 toUpperCase(), 또는 toLowerCase()를 할 때 locale 설정이 없을 경우를 검출 합니다.
7 Security SECURITY.METHOD.OVERRIDE 2 지정한 메소드가 public 이지만 final 이 아닐 경우를 검출합니다.
8 Security SECURITY.METHOD.OVERRIDE.CLONEABLE 1 clone() 메소드에서 오버라이딩이 가능한 메소드가 호출 될 경우를 검출합니다.
9 Security SECURITY.METHOD.OVERRIDE.GETPERMISSIONS 1 URLClassLoader 를 상속받은 클래스의 getPermissions 오버라이딩 함수에서 super.getPermissions 를 호출하지 않는 경우를 검출합니다.
10 Security SECURITY.METHOD.OVERRIDE.STATIC 3 상속하는 클래스에 오버라이딩 메소드가 public 정적일 경우를 검출 합니다.
11 Security SECURITY.METHOD.PROTECTED 2 메소드가 protected 한정자를 갖지만 하위 클래스에서 public 으로 오버라이딩 할 경우를 검출합니다.
12 Security LEFTOVER_DEBUG_CODE.TOBE.JS 4 디버깅 목적으로 삽입된 코드를 검출합니다.
13 Security FORMAT_STRING 3 System.out.format() 을 사용할 때 포맷 스트링을 사용하지 않거나 자료형과 맞지 않는 포맷 스트링을 사용하였을 경우를 검출합니다.
14 Security WEAK_PASSWORD_ALGORITHM.STRING 3 소스 코드 내에 취약한 암호화 알고리즘 사용을 검출합니다.
15 Security DO_NOT_COMPARE_OR_INSPECT_THE_STRING_REPRESENTATION_OF_FLOATING_POINT_VALUES 2 실수 값을 문자열 표현을 통해 비교하거나 검사하면 안됩니다.
16 Security FORBIDDEN.INSECURE_RANDOM.JS 3 보안에 취약한 random 함수를 사용하였을때 검출합니다.
17 Security SECURITY.CALL.SECURITY_CHECK 1 지정한 메소드 내에 보안 검사를 하는 메소드 호출이 있는지를 확인 합니다.
18 Security INSUFFICIENT_SESSION_ID.CONFIG 3 짧은 세션 ID를 사용하면 위험합니다.
19 Security SECURITY.CALL.REFLECTION 1 클래스, 메소드, 필드에 접근 권한을 설정할 수 있는 reflection 을 사용하였을 경우를 검출합니다.
20 Security SECURITY.IMPROPER_RESTORATION_ON_FAILURE 3 try 블록에서 예외를 throw하고, 그 아래에서 필드에 값을 할당 하는 경우를 검출합니다.
21 Security SECURITY.SYNCHRONIZE.ORDER 1 설정하고 해제하는 잠금 들이 같은 순서로 진행 될 경우 deadlock 이 발생할 수 있습니다.
22 Security SET_HTTP_ONLY_COOKIES.WEB.CONFIG 2 httpCookieshttpOnlyCookiestrue로 설정되어야 합니다.
23 Security XSS.WARNING 4 외부에서 입력한 문자열을 특정 조건부 필터링 등을 사용하여 결과 페이지를 생성할 경우 접속자의 권한으로 부적절한 스크립트가 수행되어 정보 유출될 수 있습니다.

.....

* 모두 표기할 수 없어서 일부만 기재하였습니다.

 

4) 결과 요약

본 소스코드 품질 테스팅은 농업0000 정보 시스템을 대상으로 진행하였음. 품질에 대한 영향도 평가 기준에 따라 안전결함 주의보 확인.

영향도 설 명
위험 Level 1 ~ Level5 까지 21개 이상 결함이 발생할 경우. 시스템에 잠재적인 이슈로 인해 추후에 비즈니스 영역에 피해를 미칠 위험성이 존재
주의 Level 1 ~ Level5 까지 10개 이상 ~ 21개 이내 결함이 발생할 경우. 시스템에 잠재적인 이슈로 인해 추후에 결함이 발생할 수 있는 상태
안전 Level 1 ~ Level5 까지 10개 이내 결함이 발생할 경우. 서비스에 큰 영향을 미치지 않고 중요하지 않은 품질 정보가 노출된 상태

소스코드 통계

- 소스 파일 개수 405, 빌드 라인 수 131,512라인

 

Top 10 이슈 검출 파일

 

이슈분포

- Level 1에서 38, Level 2에서 3, Level 3에서 10, 위험도가 낮은 수준인 Level 4에서 8, Level 5에서 0개 이슈 검출

 

Top 10 이슈 검출 체커

체커 타입

 체커 별 진단 결과

....

체커 상세 진단

진단(가이드) 내용

해결 방법 제공

....

진단 보고서 제공

...

 

 

김영찬 (소프트웨어 품질 전문가)

(재)전주정보문화산업진흥원(JICA)

소프트웨어 개발자로 10년간 발로 코딩 하다가 한계를 느끼고, 

2015년부터 소프트웨어 품질에 몸을 담고 기업을 돕고 있음

email.  sweng@jica.or.kr  / tel. 063-281-4113

주업무 : 소프트웨어 품질 컨설팅, 테스팅,  KOLAS 기술책임자, 개발자 네트워크 운영

자격

  - SP, CMMI, VSE(ISO 29110), ISMS(ISO 27001) 인증 심사원

  - AIT, ISTQB FL, CSTS, 29119 외 다수