서브 헤더

소스코드보안약점진단 개요

개요

최근 발생되는 인테넷상의 공격시도의 약 75%는 SW보안취약점을 악용하는 것으로, 특히 외부에 공개되어 불특정다수를 대상으로 사용자 정보를 처리하는 웹 애플리케이션의 취약점으로 인해 중요정보가 유출되는 침해사고가 빈번하게 발생되고 있어, 보안 강화를 위하여 SW개발과정에서 개발자의 실수, 논리적 오류 등으로 인해 발생될 수 있는 보안 취약점, 보안약점들을 최소화하여 사이버 보안위협에 대응할 수 있는 안전한 SW 개발을 지원하는 컨설팅 서비스

목적

  • 취약점 진단과 모의해킹을 통해 주요 정보시스템의 기술적 취약점을 파악
  • 도출된 위협에 대한 보호 대책을 제시하여 침해 사고 발생 위협을 감소
  • 보안 수준을 향상하고 정보자원의 기밀성, 무결성, 가용성을 유지

기대효과

  • 해킹 발생 가능성 최소화
  • 보안 코딩 방안 제시를 통해 조직의 개발자, 운영자의 업무 능력 향상 효과
  • 원시 코드상의 보안 취약점을 점검 및 예방하여 안정성 높은 시스템 구축
  • 프로그램 소스코드 품질 향상

SW 개발 보안 기준 및 절차

SW 개발 보안 기준

구분 내용 비고
대상
  • 정보시스템 감리대상 정보화사업
‘전자정부법 시행령 제71조 제1항’ 참조
범위
  • 설계 단계 산출물·소스코드
    (신규개발 전체, 유지보수로 변경된 부분)
상용SW 제외
기준
  • 설계단계 보안설계 기준(총 20개 항목)
  • 구현단계 보안약점 제거 기준(총 47개 항목)
※ 행정기관 및 공공기관 정보시스템 구축·운영 지침 ‘별표3’
※ 정보시스템 감리기준(제10조 제1항 세부검사항목)에 포함
진단기준
기타
  • 감리법인이 진단도구 사용시, 국정원장이 인증한 도구 사용
※ 정보보호시스템 평가·인증 지침
 
  • 감리법인은 SW보안약점 진단시, 진단원을 우선적으로 배치
※ 감리대상外 사업은 자체적으로 SW보안약점 진단·제거결과 확인
※ 행정기관 및 공공기관 정보시스템 구축·운영 지침 ‘별표4
진단원 활용

소스코드 보안 약점 진단 절차

개인정보 영향평가 절차

소스코드 보안 약점 제거 기준

입력데이터 검증 및 표현

프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정으로 인해 발생할 수 있는 보안약점

번호 보안약점 설 명
1 SQL 삽입 검증되지 않은 외부 입력값이 SQL 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
2 경로 조작 및 자원 삽입 검증되지 않은 외부 입력값이 시스템 자원 접근경로 또는 자원제어에 사용되어 공격자가 입력값을 조작해 공격할 수 있는 보안약점
3 크로스사이트 스크립트 검증되지 않은 외부 입력값에 의해 사용자 브라우저에서 악의적인 스크립트가 실행될 수 있는 보안약점
4 운영체제 명령어 삽입 검증되지 않은 외부 입력값이 운영체제 명령문 생성에 사용되어 악의적인 명령어가 실행될 수 있는 보안약점
5 위험한 형식 파일 업로드 파일의 확장자 등 파일형식에 대한 검증없이 업로드를 허용하여 발생할 수 있는 보안약점
6 신뢰되지 않는 URL 주소로 자동접속 연결 검증되지 않은 외부 입력값이 URL 링크 생성에 사용되어 악의적인 사이트로 자동접속될 수 있는 보안약점
7 XQuery 삽입 검증되지 않은 외부 입력값이 XQuery 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
8 XPath 삽입 검증되지 않은 외부 입력값이 XPath 쿼리문 생성에 사용 되어 악의적인 쿼리가 실행될 수 있는 보안약점
9 LDAP 삽입 검증되지 않은 입력값이 LDAP 명령문 생성에 사용되어 악의적인 명령어가 실행될 수 있는 보안약점
10 크로스사이트 요청 위조 검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 스크립트가 실행되어 공격자가 원하는 요청(Request)이 다른 사용자(관리자 등)의 권한으로 서버로 전송되는 보안약점
11 HTTP 응답분할 검증되지 않은 외부 입력값이 HTTP 응답헤더에 삽입되어 악의적인 코드가 실행될 수 있는 보안약점
12 정수형 오버플로우 정수를 사용한 연산의 결과가 정수값의 범위를 넘어서는 경우, 프로그램이 예기치 않게 동작될 수 있는 보안약점
13 보안기능 결정에 사용 되는 부적절한 입력값 검증되지 않은 입력값이 보안결정(인증, 인가, 권한부여 등)에 사용되어 보안 메커니즘 우회 등을 야기할 수 있는 보안약점
14 메모리 버퍼 오버플로우 메모리 버퍼의 경계값을 넘어서 메모리값을 읽거나 저장 하여 예기치 않은 결과를 발생시킬 수 있는 보안약점
15 포맷 스트링 삽입 printf 등 외부 입력값으로 포맷스트링을 제어할 수 있는 함수를 사용하여 발생할 수 있는 보안약점

보안기능

보안기능(인증, 접근제어, 기밀성, 암호화, 권한 관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점

번호 보안약점 설 명
1 적절한 인증 없는 중요기능 허용 적절한 인증없이 중요정보(금융정보, 개인정보, 인증정보 등)를 열람(또는 변경)할 수 있게 하는 보안약점
2 부적절한 인가 적절한 접근제어 없이 외부 입력값을 포함한 문자열로 중요자원에 접근할 수 있는 보안약점
3 중요한 자원에 대한 잘못된 권한 설정 중요자원(프로그램 설정, 민감한 사용자 데이터 등)에 대한 적절한 접근권한을 부여하지 않아, 인가되지 않은 사용자 등에 의해 중요정보가 노출·수정되는 보안약점
4 취약한 암호화 알고리즘 사용 중요정보(금융정보, 개인정보, 인증정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출될 수 있는 보안약점
5 중요정보 평문저장 중요정보(비밀번호, 개인정보 등)를 암호화하여 저장하지 않아 정보가 노출될 수 있는 보안약점
6 중요정보 평문전송 중요정보(비밀번호, 개인정보 등) 전송시 암호화하지 않거나 안전한 통신채널을 이용하지 않아 정보가 노출될 수 있는 보안약점
7 하드코드된 비밀번호 소스코드내에 비밀번호가 하드코딩되어 소스코드 유출시 노출 우려 및 주기적 변경 등 수정(관리자 변경 등)이 용이하지 않는 보안약점
8 충분하지 않은 키 길이 사용 데이터의 기밀성, 무결성 보장을 위해 사용되는 키의 길이가 충분하지 않아 기밀정보 누출, 무결성이 깨지는 보안약점
9 적절하지 않은 난수 값 사용 예측 가능한 난수사용으로 공격자로 하여금 다음 숫자 등을 예상하여 시스템 공격이 가능한 보안약점
10 하드코드된 암호화 키 소스코드내에 암호화키가 하드코딩되어 소스코드 유출시 노출 우려 및 키 변경이 용이하지 않는 보안약점
11 취약한 비밀번호 허용 비밀번호 조합규칙(영문, 숫자, 특수문자 등) 미흡 및 길이가 충분하지 않아 노출될 수 있는 보안약점
12 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 쿠키(세션 ID, 사용자 권한정보 등 중요정보)를 사용자 하드디스크에 저장함으로써 개인정보 등 기밀정보가 노출될 수 있는 보안약점
13 주석문 안에 포함된 시스템 주요정보 소스코드내의 주석문에 인증정보 등 시스템 주요정보가 포함되어 소스코드 유출시 노출될 수 있는 보안약점
14 솔트 없이 일방향 해쉬 함수 사용 공격자가 솔트없이 생성된 해쉬값을 얻게 된 경우, 미리 계산된 레인보우 테이블을 이용하여 원문을 찾을 수 있는 보안약점
15 무결성 검사없는 코드 다운로드 원격으로부터 소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받고 이를 실행하는 경우, 공격자가 악의적인 코드를 실행할 수 있는 보안약점
16 반복된 인증시도 제한 기능 부재 인증시도의 수를 제한하지 않아 공격자가 무작위 인증 시도를 통해 계정접근 권한을 얻을 수 있는 보안약점

시간 및 상태

동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안약점

번호 보안약점 설 명
1 경쟁조건: 검사 시점과 사용 시점(TOCTOU) 멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점
2 종료되지 않는 반복문 또는 재귀 함수 종료조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안약점

에러처리

에러를 처리하지 않거나, 불충분하게 처리하여 에러정보에 중요정보(시스템 등)가 포함될 때 발생할 수 있는 보안약점

번호 보안약점 설 명
1 오류 메시지를 통한 정보 노출 개발자가 생성한 오류메시지에 시스템 내부구조 등이 포함되어 민감한 정보가 노출될 수 있는 보안약점
2 오류 상황 대응 부재 시스템에서 발생하는 오류상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생할 수 있는 보안약점
3 부적절한 예외 처리 예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생될 수 있는 보안약점

코드오류

타입변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안약점

번호 보안약점 설 명
1 Null Pointer 역참조 Null로 설정된 변수의 주소값을 참조했을 때 발생하는 보안약점
2 부적절한 자원 해제 사용된 자원을 적절히 해제 하지 않으면 자원 누수 등이 발생하고, 자원이 부족하여 새로운 입력을 처리할 수 없게 되는 보안약점
3 해제된 자원 사용 메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생될 수 있는 보안약점
4 초기화되지 않은 변수 사용 변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생될 수 있는 보안약점

캡슐화

중요한 데이터 또는 기능성을 불충분하게 캡슐화 하였을 때, 인가되지 않은 사용자에게 데이터 누출이 가능해지는 보안약점

번호 보안약점 설 명
1 잘못된 세션에 의한 데이터 정보 노출 잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안약점
2 제거되지 않고 남은 디버그 코드 디버깅을 위해 작성된 코드를 통해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안약점
3 시스템 데이터 정보노출 사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안약점
4 Public 메소드부터 반환된 Private 배열 Private로 선언된 배열을 Public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열이 수정될 수 있는 보안약점
5 Private 배열에 Public 데이터 할당 Public으로 선언된 데이터 또는 메소드의 인자가 Private로 선언된 배열에 저장되면, Private 배열을 외부에서 접근할 수 있게 되는 보안약점

API 오용

의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점

번호 보안약점 설 명
1 DNS lookup에 의존한 보안결정 DNS는 공격자에 의해 DNS 스푸핑 공격 등이 가능함으로 보안결정을 DNS 이름에 의존할 경우, 보안결정 등이 노출되는 보안약점
2 취약한 API 사용 취약하다고 알려진 함수를 사용함으로써 예기치 않은 보안위협에 노출될 수 있는 보안약점

QUICK MENU